Push bildirimleri (Dialogflow)

Dialogflow'da keşfet

Dialogflow'da bildirim örneğimizi içe aktarmak için Devam'ı tıklayın. Ardından, adımları uygulayın:

  1. Bir aracı adı girin ve örnek için yeni bir Dialogflow aracısı oluşturun.
  2. Temsilcinin içe aktarma işlemini tamamladıktan sonra Temsilciye git'i tıklayın.
  3. Ana gezinme menüsünden Karşılama'ya gidin.
  4. Satır içi düzenleyici'yi etkinleştirin ve ardından Dağıt'ı tıklayın. Düzenleyici, örneği içeriyor girin.
  5. Ana gezinme menüsünden Integrations'a (Entegrasyonlar) gidin, ardından Google Asistan'a dokunun.
  6. Görünen kalıcı pencerede Otomatik önizleme değişiklikleri'ni etkinleştirin ve Test et'i tıklayın. Eylem simülatörünü açın.
  7. Simülatörde Talk to my test app komutunu girerek örneği test edebilirsiniz.
Devam

İşleminiz uygun olduğunda kullanıcılara bildirim gönderebilir. Örneğin, bir görev için son tarih yaklaştığında bir hatırlatıcı.

Bu kılavuzda, Actions on Google ipuçları örneğini kullanıyoruz. işleminize yönelik push bildirimlerini nasıl ayarlayacağınızı gösteren referans olarak kullanabilirsiniz. Kullanıcılar bu işlemi çağırdığında bir ipucu duymak isteyip istemedikleri sorulur . Kullanıcılar şunları yapabilir: ipucu için belirli veya rastgele seçilmiş bir kategori seçebilir veya en son ipucunu dinlemeyi seçin.

Desteklenen yüzeyler

Push bildirimleri Android ve iOS cihazlarda kullanılabilir (iOS cihazlar push bildirimlerini almak için Asistan uygulamasını yüklemeniz gerekir). Bunlar: şu anda sesle etkinleştirilen hoparlörler, akıllı ekranlar veya diğer yüzeylerde desteklenmektedir.

Ön koşullar

Actions projenizdeki Eylemlerden en az biri Kullanıcı, şuradan alınan bir bildirime dokunduğunda çağrılacak olan tetikleme niyeti Asistan.

İşlemleriniz, push bildiriminden Varsayılan Karşılama Niyetini tetikleyecek şekilde yapılandırılamıyor.

Konsol kurulumu

İşleminize push bildirimleri desteği eklemek için:

  1. Actions Console'a gidin ve Oluştur > İşlemler.

  2. Kullanmak istediğiniz ek tetikleme amacıyla eşleşen İşlemi tıklayın push bildirimlerini etkinleştirebilirsiniz.

    Actions on Google ipuçları örneği için "tell_En Son_tip" öğesini seçersiniz.

  3. Kullanıcı etkileşimi bölümüne gidin ve etkinleştirin Push bildirimi göndermek ister misiniz?

  4. İçerik başlığı girin.

    Actions on Google ipuçları örneği için başlık "Yeni ipucu eklendi" olabilir.

  5. Kaydet'i tıklayın.

İçe aktarılanlar

Sonraki bölümlerde, sipariş karşılama kodunuzda aşağıdaki içe aktarmaları bildirmeniz gerekir:

Dialogflow
const {
  dialogflow,
  UpdatePermission,
  Suggestions,
} = require('actions-on-google');
Actions SDK'sı
const {
  actionssdk,
  UpdatePermission,
  Suggestions,
} = require('actions-on-google');

İzin veren kullanıcılar

Kullanıcılara push bildirimleri göndermeden önce bildirimleri etkinleştirmelerini istemeniz gerekir. Bunun için çocuğunuza bir öneri çipi göstererek izin istemesini sağlayabilirsiniz. İzin verdiklerinde, gönderebileceğiniz bir güncelleme kullanıcı kimliği alırsınız. push bildirimi gönderebilirsiniz.

Etkinleştirme için öneri çiplerini göster

Kullanıcıların İşleminizle ilgili push bildirimleri alabilmesi için kullanıcılara öneri çipini kullanarak push bildirimlerini etkinleştirmeye davet edebilirsiniz.

Aşağıdaki kod snippet'i kullanıcıya "Yeni ipuçları konusunda beni uyar" gönderir öneri simgesini tıklayın.

Dialogflow Node.js
conv.ask('I can send you push notifications. Would you like that?');
conv.ask(new Suggestions('Send notifications'));
İşlemler SDK'sı Node.js
conv.ask(' I can send you push notifications. Would you like that?');
conv.ask(new Suggestions('Send notifications'));
Dialogflow Java
responseBuilder
    .add("I can send you push notifications. Would you like that?")
    .addSuggestions(new String[] {
        "Send notifications"
    });
Actions SDK'sı Java
responseBuilder
    .add("I can send you push notifications. Would you like that?")
    .addSuggestions(new String[] {
        "Send notifications"
    });
Dialogflow JSON

Aşağıdaki JSON dosyasının bir webhook yanıtını açıkladığını unutmayın.

{
  "payload": {
    "google": {
      "expectUserResponse": true,
      "richResponse": {
        "items": [
          {
            "simpleResponse": {
              "textToSpeech": "Hi! Welcome to Push Notifications!"
            }
          },
          {
            "simpleResponse": {
              "textToSpeech": "I can send you push notifications. Would you like that?"
            }
          }
        ],
        "suggestions": [
          {
            "title": "Send notifications"
          }
        ]
      }
    }
  }
}
İşlemler SDK'sı JSON

Aşağıdaki JSON dosyasının bir webhook yanıtını açıkladığını unutmayın.

{
  "expectUserResponse": true,
  "expectedInputs": [
    {
      "possibleIntents": [
        {
          "intent": "actions.intent.TEXT"
        }
      ],
      "inputPrompt": {
        "richInitialPrompt": {
          "items": [
            {
              "simpleResponse": {
                "textToSpeech": "Hi! Welcome to Push Notifications!"
              }
            },
            {
              "simpleResponse": {
                "textToSpeech": " I can send you push notifications. Would you like that?"
              }
            }
          ],
          "suggestions": [
            {
              "title": "Send notifications"
            }
          ]
        }
      }
    }
  ]
}

Kullanıcılar çipe dokunduktan sonra UPDATE izni istemeniz gerekir. Aşağıdaki kodda, askForUpdatePermission ile bunu nasıl yapacağınız gösterilmektedir işlevinden emin olun.

Dialogflow Node.js
  1. Dialogflow konsolunda aracınızı açın ve güncellemeler için yapılandırdığınız amacı seçin.
  2. Ekranı aşağı kaydırarak Yanıt bölümüne gidin ve Google Asistan sekmesini açın.
  3. Mesaj içeriği ekle'yi tıklayın ve Öneri çipleri'ni seçin.
  4. Çip metnini, kullanıcıyı kaydolmaya davet edecek bir şeye ayarlayın. Actions on Google ipuçları örneği için çipi Beni yeni ipuçları konusunda uyar olarak ayarladık.
  5. setup_push gibi adlı başka bir Dialogflow niyeti ekleyin ve karşılık gelen bir işlem ayarlayın (örneğin, setup.push). Bu amacın kullanıcı ifadesi, etkinleştirme çipinin metniyle eşleşmelidir. Beni yeni ipuçları konusunda uyar.
ziyaret edin. Aşağıdaki snippet'te, Actions (İşlemler) öğesini kullanarak izni nasıl isteyeceğiniz gösterilmektedir Node.js için Google istemci kitaplığında:
app.intent('Subscribe to Notifications', (conv) => {
  conv.ask(new UpdatePermission({
    intent: 'Notification',
  }));
});
İşlemler SDK'sı Node.js

NLU çözümünüzü, Kullanıcı ifadesi, push bildirimlerinin değeriyle eşleşirse izin etkinleştirme istemi. Dize eşleştirmeye dayalı çok temel bir örneği aşağıda bulabilirsiniz:

conv.ask(new UpdatePermission({
  intent: 'Notification',
}));
Dialogflow Java
  1. Dialogflow konsolunda aracınızı açın ve güncellemeler için yapılandırdığınız amacı seçin.
  2. Ekranı aşağı kaydırarak Yanıt bölümüne gidin ve Google Asistan sekmesini açın.
  3. Mesaj içeriği ekle'yi tıklayın ve Öneri çipleri'ni seçin.
  4. Çip metnini, kullanıcıyı kaydolmaya davet edecek bir şeye ayarlayın. Actions on Google ipuçları örneği için çipi Beni yeni ipuçları konusunda uyar olarak ayarladık.
  5. setup_push gibi adlı başka bir Dialogflow niyeti ekleyin ve karşılık gelen bir işlem ayarlayın (örneğin, setup.push). Bu amacın kullanıcı ifadesi, etkinleştirme çipinin metniyle eşleşmelidir. Beni yeni ipuçları konusunda uyar.
ziyaret edin. Aşağıdaki snippet'te, Actions (İşlemler) öğesini kullanarak izni nasıl isteyeceğiniz gösterilmektedir on Google Java/Kotlin istemci kitaplığında:
@ForIntent("Subscribe to Notifications")
public ActionResponse subscribeToNotifications(ActionRequest request) {
  ResponseBuilder responseBuilder = getResponseBuilder(request);
  responseBuilder.add(new UpdatePermission().setIntent("Notification"));
  return responseBuilder.build();
}
Actions SDK'sı Java

NLU çözümünüzü, Kullanıcı ifadesi, push bildirimlerinin değeriyle eşleşirse izin etkinleştirme istemi. Dize eşleştirmeye dayalı çok temel bir örneği aşağıda bulabilirsiniz:

ResponseBuilder responseBuilder = getResponseBuilder(request);
responseBuilder.add(new UpdatePermission().setIntent("Notification"));
return responseBuilder.build();
Dialogflow JSON

Aşağıdaki JSON dosyasının Dialogflow kullanarak bir webhook yanıtını açıkladığını unutmayın.

{
  "payload": {
    "google": {
      "expectUserResponse": true,
      "systemIntent": {
        "intent": "actions.intent.PERMISSION",
        "data": {
          "@type": "type.googleapis.com/google.actions.v2.PermissionValueSpec",
          "permissions": [
            "UPDATE"
          ],
          "updatePermissionValueSpec": {
            "intent": "tell_latest_tip"
          }
        }
      }
    }
  }
}
İşlemler SDK'sı JSON

Aşağıdaki JSON dosyasının Actions SDK'sını kullanarak webhook yanıtını açıkladığını unutmayın.

{
  "expectUserResponse": true,
  "expectedInputs": [
    {
      "possibleIntents": [
        {
          "intent": "actions.intent.PERMISSION",
          "inputValueData": {
            "@type": "type.googleapis.com/google.actions.v2.PermissionValueSpec",
            "permissions": [
              "UPDATE"
            ],
            "updatePermissionValueSpec": {
              "intent": "tell_latest_tip"
            }
          }
        }
      ]
    }
  ]
}

Aboneliği tamamlama

Aboneliği Node.js webhook'unuzdan tamamlamak için Kullanıcının bildirim kimliği ve seçtiği amaç. Her ikisi de bağımsız değişkenleri de dahil etmelisiniz.

İşleminiz Dialogflow ile derlenmişse şunları yapmanız gerekir:

  • actions_intent_PERMISSION işleyen bir intent ekleyin.
  • Niyetin İşlem adını, webhook'unuzun yapabileceği bir şekilde belirtin filtre uygulayabilirsiniz.

Aşağıdaki kodda, bir intent içeren Dialogflow niyetinin nasıl işleneceği gösterilmektedir finish_push_setup adlı, İşlem adı finish.push.setup:

Dialogflow Node.js
app.intent('Confirm Notifications Subscription', (conv) => {
  if (conv.arguments.get('PERMISSION')) {
    const updatesUserId = conv.arguments.get('UPDATES_USER_ID');
    // Store user ID in database for later use
    conv.close(`Ok, I'll start alerting you.`);
  } else {
    conv.close(`Ok, I won't alert you.`);
  }
});
İşlemler SDK'sı Node.js
app.intent('actions.intent.PERMISSION', (conv) => {
  if (conv.arguments.get('PERMISSION')) {
    const updatesUserId = conv.arguments.get('UPDATES_USER_ID');
    // Store user ID in database for later use
    conv.close(`Ok, I'll start alerting you.`);
  } else {
    conv.close(`Ok, I won't alert you.`);
  }
});
Dialogflow Java
@ForIntent("Confirm Notifications Subscription")
public ActionResponse confirmNotificationsSubscription(ActionRequest request) {
  // Verify the user has subscribed for push notifications
  ResponseBuilder responseBuilder = getResponseBuilder(request);
  if (request.isPermissionGranted()) {
    Argument userId = request.getArgument(ConstantsKt.ARG_UPDATES_USER_ID);
    if (userId != null) {
      // Store the user's ID in the database
    }
    responseBuilder.add("Ok, I'll start alerting you.");
  } else {
    responseBuilder.add("Ok, I won't alert you.");
  }
  responseBuilder.endConversation();
  return responseBuilder.build();
}
Actions SDK'sı Java
@ForIntent("actions.intent.PERMISSION")
public ActionResponse confirmNotificationsSubscription(ActionRequest request) {
  // Verify the user has subscribed for push notifications
  ResponseBuilder responseBuilder = getResponseBuilder(request);
  if (request.isPermissionGranted()) {
    Argument userId = request.getArgument(ConstantsKt.ARG_UPDATES_USER_ID);
    if (userId != null) {
      // Store the user's ID in the database
    }
    responseBuilder.add("Ok, I'll start alerting you.");
  } else {
    responseBuilder.add("Ok, I won't alert you.");
  }
  responseBuilder.endConversation();
  return responseBuilder.build();
}
Dialogflow JSON

Aşağıdaki JSON dosyasının webhook'a yapılan bir isteği açıkladığını unutmayın.

{
  "responseId": "ee9e7ed5-fa1a-48c6-aac7-f9fbe94f1f58-712767ed",
  "queryResult": {
    "queryText": "actions_intent_PERMISSION",
    "action": "confirm.subscription",
    "parameters": {},
    "allRequiredParamsPresent": true,
    "fulfillmentMessages": [
      {
        "text": {
          "text": [
            ""
          ]
        }
      }
    ],
    "outputContexts": [
      {
        "name": "projects/PROJECT_ID/agent/sessions/ABwppHGIgmmU3zBcYMF_vWoHaM4JUo3wniYBHdbUF25l63G7EQWjRnlne8Ar7AOcRHWn1lrEKGy8qdP0UXLcWDBq93k/contexts/actions_capability_screen_output"
      },
      {
        "name": "projects/PROJECT_ID/agent/sessions/ABwppHGIgmmU3zBcYMF_vWoHaM4JUo3wniYBHdbUF25l63G7EQWjRnlne8Ar7AOcRHWn1lrEKGy8qdP0UXLcWDBq93k/contexts/actions_capability_account_linking"
      },
      {
        "name": "projects/PROJECT_ID/agent/sessions/ABwppHGIgmmU3zBcYMF_vWoHaM4JUo3wniYBHdbUF25l63G7EQWjRnlne8Ar7AOcRHWn1lrEKGy8qdP0UXLcWDBq93k/contexts/actions_capability_media_response_audio"
      },
      {
        "name": "projects/PROJECT_ID/agent/sessions/ABwppHGIgmmU3zBcYMF_vWoHaM4JUo3wniYBHdbUF25l63G7EQWjRnlne8Ar7AOcRHWn1lrEKGy8qdP0UXLcWDBq93k/contexts/actions_capability_audio_output"
      },
      {
        "name": "projects/PROJECT_ID/agent/sessions/ABwppHGIgmmU3zBcYMF_vWoHaM4JUo3wniYBHdbUF25l63G7EQWjRnlne8Ar7AOcRHWn1lrEKGy8qdP0UXLcWDBq93k/contexts/actions_capability_web_browser"
      },
      {
        "name": "projects/PROJECT_ID/agent/sessions/ABwppHGIgmmU3zBcYMF_vWoHaM4JUo3wniYBHdbUF25l63G7EQWjRnlne8Ar7AOcRHWn1lrEKGy8qdP0UXLcWDBq93k/contexts/google_assistant_input_type_keyboard"
      },
      {
        "name": "projects/PROJECT_ID/agent/sessions/ABwppHGIgmmU3zBcYMF_vWoHaM4JUo3wniYBHdbUF25l63G7EQWjRnlne8Ar7AOcRHWn1lrEKGy8qdP0UXLcWDBq93k/contexts/actions_intent_permission",
        "parameters": {
          "PERMISSION": true,
          "text": "yes",
          "UPDATES_USER_ID": "ABwppHHssyPbvEBF1mgN7Ddwb7mkhiVohW9PZ--I_svqy7zFElA4DHkf9pn04UBd5gwZo26_RfXCQ8otcztyIfe6MCQ"
        }
      }
    ],
    "intent": {
      "name": "projects/PROJECT_ID/agent/intents/c7f7b30b-5b88-4bb5-b0b8-1cd0862d1dd2",
      "displayName": "Confirm Notifications Subscription"
    },
    "intentDetectionConfidence": 1,
    "languageCode": "en"
  },
  "originalDetectIntentRequest": {
    "source": "google",
    "version": "2",
    "payload": {
      "user": {
        "permissions": [
          "UPDATE"
        ],
        "locale": "en-US",
        "userVerificationStatus": "VERIFIED"
      },
      "conversation": {
        "conversationId": "ABwppHGIgmmU3zBcYMF_vWoHaM4JUo3wniYBHdbUF25l63G7EQWjRnlne8Ar7AOcRHWn1lrEKGy8qdP0UXLcWDBq93k",
        "type": "ACTIVE",
        "conversationToken": "[]"
      },
      "inputs": [
        {
          "intent": "actions.intent.PERMISSION",
          "rawInputs": [
            {
              "inputType": "KEYBOARD",
              "query": "yes"
            }
          ],
          "arguments": [
            {
              "name": "PERMISSION",
              "boolValue": true,
              "textValue": "true"
            },
            {
              "name": "text",
              "rawText": "yes",
              "textValue": "yes"
            },
            {
              "name": "UPDATES_USER_ID",
              "textValue": "ABwppHHssyPbvEBF1mgN7Ddwb7mkhiVohW9PZ--I_svqy7zFElA4DHkf9pn04UBd5gwZo26_RfXCQ8otcztyIfe6MCQ"
            }
          ]
        }
      ],
      "surface": {
        "capabilities": [
          {
            "name": "actions.capability.SCREEN_OUTPUT"
          },
          {
            "name": "actions.capability.ACCOUNT_LINKING"
          },
          {
            "name": "actions.capability.MEDIA_RESPONSE_AUDIO"
          },
          {
            "name": "actions.capability.AUDIO_OUTPUT"
          },
          {
            "name": "actions.capability.WEB_BROWSER"
          }
        ]
      },
      "availableSurfaces": [
        {
          "capabilities": [
            {
              "name": "actions.capability.AUDIO_OUTPUT"
            },
            {
              "name": "actions.capability.SCREEN_OUTPUT"
            },
            {
              "name": "actions.capability.WEB_BROWSER"
            }
          ]
        }
      ]
    }
  },
  "session": "projects/PROJECT_ID/agent/sessions/ABwppHGIgmmU3zBcYMF_vWoHaM4JUo3wniYBHdbUF25l63G7EQWjRnlne8Ar7AOcRHWn1lrEKGy8qdP0UXLcWDBq93k"
}
İşlemler SDK'sı JSON

Aşağıdaki JSON dosyasının webhook'a yapılan bir isteği açıkladığını unutmayın.

{
  "user": {
    "permissions": [
      "UPDATE"
    ],
    "locale": "en-US",
    "userVerificationStatus": "VERIFIED"
  },
  "conversation": {
    "conversationId": "ABwppHEP6OAFZHkSGEiZ5HYM9qrlk8YtIH1DQmJ52cxXELSPvM-kSc_tMJ_5O6ITbgVJlY9i2FIsKWjE_HXLke48",
    "type": "NEW"
  },
  "inputs": [
    {
      "intent": "actions.intent.PERMISSION",
      "rawInputs": [
        {
          "inputType": "KEYBOARD",
          "query": "yes"
        }
      ],
      "arguments": [
        {
          "name": "PERMISSION",
          "boolValue": true,
          "textValue": "true"
        },
        {
          "name": "text",
          "rawText": "yes",
          "textValue": "yes"
        },
        {
          "name": "UPDATES_USER_ID",
          "textValue": "ABwppHFvBKC-tMYUsUjJkm3YECgZvd6A3sOc7KuQvO4ZdQX3bGLmyoQ41dh4Zmtlzv_kaOKBt1Sf6eRpNbayynrl"
        }
      ]
    }
  ],
  "surface": {
    "capabilities": [
      {
        "name": "actions.capability.AUDIO_OUTPUT"
      },
      {
        "name": "actions.capability.WEB_BROWSER"
      },
      {
        "name": "actions.capability.SCREEN_OUTPUT"
      },
      {
        "name": "actions.capability.ACCOUNT_LINKING"
      },
      {
        "name": "actions.capability.MEDIA_RESPONSE_AUDIO"
      }
    ]
  },
  "availableSurfaces": [
    {
      "capabilities": [
        {
          "name": "actions.capability.AUDIO_OUTPUT"
        },
        {
          "name": "actions.capability.SCREEN_OUTPUT"
        },
        {
          "name": "actions.capability.WEB_BROWSER"
        }
      ]
    }
  ]
}

Bildirim gönder

Actions API'yi kullanarak kullanıcılara push bildirimleri gönderebilirsiniz. Bu API'yi kullanmak için Google Cloud projenizde API'yi etkinleştirmeniz ve uygulamanızı indirip JSON hizmet hesabı anahtarı. Buradaki kod örneğinde bulunan talimatlarda 8. adıma bakın.

Ardından, hizmet hesabı anahtarı değişimi için Google OAuth2 istemci kitaplığını kullanabilirsiniz ve Actions API'ye yönelik isteklerinizin kimliğini doğrulamak için jetonu kullanın.

Hizmet hesabı anahtarı al

  1. "ornek-proje-1" ifadesini değiştirerek bu URL'ye gidin sonuna proje kimliği ekleyin Actions konsolunda: https://console.developers.google.com/apis/api/actions.googleapis.com/overview?project=example-project-1
  2. Etkinleştir düğmesini görüyorsanız bu düğmeyi tıklayın. Aksi durumda 3. adıma geçin.
  3. "ornek-proje-1" ifadesini değiştirerek bu URL'ye gidin sonuna proje kimliği ekleyin Actions konsolunda: https://console.developers.google.com/apis/credentials?project=example-project-1
  4. Kimlik bilgileri oluştur > Hizmet Hesabı Anahtarı.
  5. Service Account (Hizmet Hesabı) bölümünde Select (Seç) kutusunu ve New Service'i (Yeni Hizmet) tıklayın. Hesap.
  6. Hizmet Hesabına "bildirimler" gibi bir ad verin. ve şu görevin Rolü: Proje Sahibi.
  7. JSON anahtarı türünü seçip Create'i (Oluştur) tıklayın. JSON hizmet hesabı anahtarı yerel makinenize indirin.

Anahtarı bir erişim jetonuyla değiştirin ve bildirim gönderin

Actions API üzerinden bildirim göndermek için erişim jetonu için hizmet hesabı anahtarını kullanın. Google API istemcisi kullanmanızı öneririz kitaplığını oluşturacağım. İzleyen kod snippet'leri dizisinde, Google API Node.js istemci kitaplığı.

  1. Google API istemci kitaplığını yükleyin ve şunları isteyin: npm install googleapis request --save.
  2. Hizmet hesabı anahtarından erişim jetonu almak için aşağıdaki kodu kullanın ve bir push bildirimi gönderin:
ziyaret edin.
Dialogflow Node.js
const {google} = require('googleapis');
const request = require('request');

const jwtClient = new google.auth.JWT(
  serviceAccount.client_email, null, serviceAccount.private_key,
  ['https://www.googleapis.com/auth/actions.fulfillment.conversation'],
  null
);

jwtClient.authorize((err, tokens) => {
  if (!err) {
    request.post('https://actions.googleapis.com/v2/conversations:send', {
      auth: {
        bearer: tokens.access_token,
      },
      json: true,
      body: {
        customPushMessage: {
          userNotification: {
            title: 'Push Notification Title',
          },
          target: {
            userId: '<UPDATES_USER_ID>',
            intent: 'Notification Intent',
          },
        },
        isInSandbox: true,
      },
    }, (err, httpResponse, body) => {
      console.log(`${httpResponse.statusCode}: ${httpResponse.statusMessage}`);
    });
  }
});
İşlemler SDK'sı Node.js
const {google} = require('googleapis');
const request = require('request');

const jwtClient = new google.auth.JWT(
  serviceAccount.client_email, null, serviceAccount.private_key,
  ['https://www.googleapis.com/auth/actions.fulfillment.conversation'],
  null
);

jwtClient.authorize((err, tokens) => {
  if (!err) {
    request.post('https://actions.googleapis.com/v2/conversations:send', {
      auth: {
        bearer: tokens.access_token,
      },
      json: true,
      body: {
        customPushMessage: {
          userNotification: {
            title: 'Push Notification Title',
          },
          target: {
            userId: '<UPDATES_ORDER_ID>',
            intent: 'Notification Intent',
          },
        },
        isInSandbox: true,
      },
    }, (err, httpResponse, body) => {
      console.log(`${httpResponse.statusCode}: ${httpResponse.statusMessage}`);
    });
  }
});
Dialogflow Java
final class Notification {

  private final String title;

  Notification(String title) {
    this.title = title;
  }

  String getTitle() {
    return title;
  }
}

final class Target {

  private final String userId;
  private final String intent;
  private final String locale;

  Target(String userId, String intent, String locale) {
    this.userId = userId;
    this.intent = intent;
    this.locale = locale;
  }

  String getUserId() {
    return userId;
  }

  String getIntent() {
    return intent;
  }

  String getLocale() {
    return locale;
  }
}

final class PushMessage {

  private final Notification userNotification;
  private final Target target;

  PushMessage(Notification userNotification, Target target) {
    this.userNotification = userNotification;
    this.target = target;
  }

  Notification getUserNotification() {
    return userNotification;
  }

  Target getTarget() {
    return target;
  }
}

final class PushNotification {

  private final PushMessage customPushMessage;
  private boolean isInSandbox;

  PushNotification(PushMessage customPushMessage, boolean isInSandbox) {
    this.customPushMessage = customPushMessage;
    this.isInSandbox = isInSandbox;
  }

  PushMessage getCustomPushMessage() {
    return customPushMessage;
  }

  boolean getIsInSandbox() {
    return isInSandbox;
  }
}

private PushNotification createNotification(String title, String userId, String intent, String locale) {
  Notification notification = new Notification(title);
  Target target = new Target(userId, intent, locale);
  PushMessage message = new PushMessage(notification, target);
  boolean isInSandbox = true;
  return new PushNotification(message, isInSandbox);
}

private ServiceAccountCredentials loadCredentials() throws IOException {
  String actionsApiServiceAccountFile =
      this.getClass().getClassLoader().getResource("service-account.json").getFile();
  InputStream actionsApiServiceAccount = new FileInputStream(actionsApiServiceAccountFile);
  ServiceAccountCredentials serviceAccountCredentials =
      ServiceAccountCredentials.fromStream(actionsApiServiceAccount);
  return (ServiceAccountCredentials)
      serviceAccountCredentials.createScoped(
          Collections.singleton(
              "https://www.googleapis.com/auth/actions.fulfillment.conversation"));
}

private String getAccessToken() throws IOException {
  AccessToken token = loadCredentials().refreshAccessToken();
  return token.getTokenValue();
}

public void sendNotification(String title, String userId, String intent, String locale) throws IOException {
  Preconditions.checkNotNull(title, "title cannot be null.");
  Preconditions.checkNotNull(userId, "userId cannot be null.");
  Preconditions.checkNotNull(intent, "intent cannot be null.");
  Preconditions.checkNotNull(locale, "locale cannot be null");
  PushNotification notification = createNotification(title, userId, intent, locale);

  HttpPost request = new HttpPost("https://actions.googleapis.com/v2/conversations:send");

  String token = getAccessToken();

  request.setHeader("Content-type", "application/json");
  request.setHeader("Authorization", "Bearer " + token);

  StringEntity entity = new StringEntity(new Gson().toJson(notification));
  entity.setContentType(ContentType.APPLICATION_JSON.getMimeType());
  request.setEntity(entity);
  HttpClient httpClient = HttpClientBuilder.create().build();
  httpClient.execute(request);
}
Actions SDK'sı Java
final class Notification {

  private final String title;

  Notification(String title) {
    this.title = title;
  }

  String getTitle() {
    return title;
  }
}

final class Target {

  private final String userId;
  private final String intent;

  Target(String userId, String intent) {
    this.userId = userId;
    this.intent = intent;
  }

  String getUserId() {
    return userId;
  }

  String getIntent() {
    return intent;
  }
}

final class PushMessage {

  private final Notification userNotification;
  private final Target target;

  PushMessage(Notification userNotification, Target target) {
    this.userNotification = userNotification;
    this.target = target;
  }

  Notification getUserNotification() {
    return userNotification;
  }

  Target getTarget() {
    return target;
  }
}

final class PushNotification {

  private final PushMessage customPushMessage;
  private boolean isInSandbox;

  PushNotification(PushMessage customPushMessage, boolean isInSandbox) {
    this.customPushMessage = customPushMessage;
    this.isInSandbox = isInSandbox;
  }

  PushMessage getCustomPushMessage() {
    return customPushMessage;
  }

  boolean getIsInSandbox() {
    return isInSandbox;
  }
}

private PushNotification createNotification(String title, String userId, String intent) {
  Notification notification = new Notification(title);
  Target target = new Target(userId, intent);
  PushMessage message = new PushMessage(notification, target);
  boolean isInSandbox = true;
  return new PushNotification(message, isInSandbox);
}

private ServiceAccountCredentials loadCredentials() throws IOException {
  String actionsApiServiceAccountFile =
      this.getClass().getClassLoader().getResource("service-account.json").getFile();
  InputStream actionsApiServiceAccount = new FileInputStream(actionsApiServiceAccountFile);
  ServiceAccountCredentials serviceAccountCredentials =
      ServiceAccountCredentials.fromStream(actionsApiServiceAccount);
  return (ServiceAccountCredentials)
      serviceAccountCredentials.createScoped(
          Collections.singleton(
              "https://www.googleapis.com/auth/actions.fulfillment.conversation"));
}

private String getAccessToken() throws IOException {
  AccessToken token = loadCredentials().refreshAccessToken();
  return token.getTokenValue();
}

public void sendNotification(String title, String userId, String intent) throws IOException {
  Preconditions.checkNotNull(title, "title cannot be null.");
  Preconditions.checkNotNull(userId, "userId cannot be null.");
  Preconditions.checkNotNull(intent, "intent cannot be null.");
  PushNotification notification = createNotification(title, userId, intent);

  HttpPost request = new HttpPost("https://actions.googleapis.com/v2/conversations:send");

  String token = getAccessToken();

  request.setHeader("Content-type", "application/json");
  request.setHeader("Authorization", "Bearer " + token);

  StringEntity entity = new StringEntity(new Gson().toJson(notification));
  entity.setContentType(ContentType.APPLICATION_JSON.getMimeType());
  request.setEntity(entity);
  HttpClient httpClient = HttpClientBuilder.create().build();
  httpClient.execute(request);
}