Thông báo đẩy

Hành động của bạn có thể đẩy thông báo cho người dùng bất cứ khi nào có liên quan, chẳng hạn như gửi lời nhắc khi gần đến hạn thực hiện một việc cần làm.

Hướng dẫn này mô tả cách thiết lập thông báo đẩy cho Hành động của bạn.

Nền tảng được hỗ trợ

Thông báo đẩy có trên thiết bị Android và iOS (thiết bị iOS phải cài đặt ứng dụng Trợ lý để nhận thông báo đẩy). Các tính năng này hiện không được hỗ trợ trên loa kích hoạt bằng giọng nói, màn hình thông minh hoặc các nền tảng khác.

Điều kiện tiên quyết

Dự án của bạn phải chứa ít nhất một ý định chung. Ý định này được gọi khi người dùng nhấn vào một thông báo đẩy nhận được từ Trợ lý.

Bắt đầu

Các phần sau đây mô tả cách thiết lập thông báo đẩy trong Hành động của bạn.

Tạo ý định để kích hoạt

Ý định bạn tạo trong phần này sẽ kích hoạt luồng thông báo. Để tạo ý định này, hãy làm theo các bước sau:

  1. Chuyển đến Bảng điều khiển Actions rồi nhấp vào Phát triển trong trình đơn trên cùng.
  2. Nhấp vào Ý định trong trình đơn bên trái để mở rộng phần này.
  3. Nhấp vào ở cuối danh sách rồi nhập tên cho ý định mới.
  4. Nhấn Enter/Return để tạo ý định mới.
  5. Thêm các cụm từ huấn luyện để kích hoạt luồng thông báo. Dưới đây là một số ví dụ:

    • Notify me
    • Send notifications
    • Subscribe to notifications
  6. Nhấp vào Lưu.

Chuyển đổi sang ý định của hệ thống

Để thiết lập hiệu ứng chuyển đổi sang cảnh hệ thống Notifications, hãy làm theo các bước sau:

  1. Trong mục Cảnh ở trình đơn bên trái, hãy nhấp vào cảnh mà bạn muốn thêm quy trình đăng ký thông báo.
  2. Trong phần User intent handling (Xử lý ý định của người dùng) của cảnh, hãy nhấp vào dấu + để thêm một trình xử lý ý định mới.
  3. Trong mục Ý định, hãy chọn ý định mà bạn đã tạo trong phần trước.
  4. Trong Chuyển đổi, chọn cảnh hệ thống Thông báo.

  5. Nhấp vào Lưu.

Định cấu hình cảnh hệ thống

Để định cấu hình cảnh hệ thống Notifications, hãy làm theo các bước sau:

  1. Trong phần Cảnh ở trình đơn bên trái, hãy chọn cảnh hệ thống mới có tên là Thông báo.
  2. Trong phần Định cấu hình ý định, hãy nhấp vào Chọn ý định.
  3. Trong phần Chọn ý định, hãy chọn ý định bạn muốn được so khớp khi người dùng nhấn vào một thông báo đẩy.

  4. Đối với phần Tuỳ chỉnh lời nhắc nhận thông báo, hãy nhập lời nhắc mà người dùng nhìn thấy khi họ được yêu cầu đăng ký nhận thông báo đẩy. Lời nhắc có dạng "Is it ok if I send notification for $prompt" (Có ổn nếu tôi gửi thông báo đẩy về $prompt).

  5. Nhấp vào Lưu.

Thiết lập lựa chọn sử dụng

Để định cấu hình cách chọn nhận thông báo đẩy, hãy làm theo các bước sau:

  1. Trong Scenes (Cảnh), hãy chọn cảnh hệ thống Notifications (Thông báo).
  2. Trong mục Điều kiện, hãy chọn Nếu người dùng trả lời "có".
  3. Bật tính năng Gọi webhook và cung cấp tên trình xử lý sự kiện, chẳng hạn như subscribe_to_notifications.
  4. Bật tính năng Gửi lời nhắc và đưa ra một lời nhắc đơn giản để cho người dùng biết rằng họ sẽ nhận được thông báo:

    candidates:
    - first simple:
      variants:
      - speech: 'Great, I'll send you notifications.'
    
  5. Trong phần Chuyển đổi, hãy chọn Kết thúc cuộc trò chuyện để kết thúc cuộc trò chuyện sau khi người dùng đăng ký nhận thông báo.

Định cấu hình chọn không sử dụng

Để định cấu hình cách chọn không nhận thông báo đẩy, hãy làm theo các bước sau:

  1. Trong mục Điều kiện, hãy chọn Nếu người dùng nói "không".
  2. Bật tính năng Gửi lời nhắc và đưa ra một lời nhắc đơn giản để cho người dùng biết rằng họ sẽ không nhận được thông báo:

    candidates:
    - first simple:
      variants:
      - speech: Okay, I won't send you notifications.
    
  3. Trong phần Chuyển đổi, hãy chọn Kết thúc cuộc trò chuyện để kết thúc cuộc trò chuyện sau khi người dùng từ chối nhận thông báo.

Định cấu hình webhook

Để định cấu hình webhook, hãy làm theo các bước sau:

  1. Trong webhook, hãy thêm một trình xử lý ý định để lưu trữ updatesUserId:

    app.handle('subscribe_to_notifications', conv => {
      const intentName = '<name_of_intent_to_trigger>';
      const notificationsSlot = conv.session.params['NotificationSlot_${intentName}'];
      if(notificationsSlot.permissionStatus == 'PERMISSION_GRANTED') {
        const updateUserId = notificationsSlot.additionalUserData.updateUserId;
        // Store the user ID and the notification's target intent for later use.
        // (Use a database, like Firestore, for best practice.)
      }
    });
    

Gửi thông báo

Thông báo đẩy được gửi đến người dùng bằng Actions API. Để sử dụng API này, bạn cần kích hoạt API trong dự án của mình trên Google Cloud, đồng thời thiết lập và tải khoá tài khoản dịch vụ JSON xuống.

Sau đó, bạn có thể sử dụng thư viện ứng dụng Google OAuth2 để trao đổi khoá tài khoản dịch vụ lấy mã truy cập và sử dụng mã thông báo này để xác thực yêu cầu của bạn với Actions API.

Nhận khoá tài khoản dịch vụ

  1. Chuyển đến Bảng điều khiển API của Google rồi chọn dự án của bạn trong trình đơn thả xuống Chọn dự án.
  2. Nhấp vào Enable (Bật) để bật Actions API cho dự án của bạn.
  3. Truy cập vào trang thông tin xác thực của Google Cloud Console rồi chọn dự án của bạn trong trình đơn thả xuống Chọn một dự án.
  4. Nhấp vào Tạo thông tin xác thực > Tài khoản dịch vụ.
  5. Nhập tên tài khoản dịch vụ rồi nhấp vào Tạo.
  6. Trong trình đơn thả xuống Chọn vai trò, hãy chọn Dự án > Chủ sở hữu.
  7. Nhấp vào Tiếp tục.
  8. Nhấp vào Tạo khoá để tải tệp JSON của tài khoản dịch vụ xuống.

Đổi khoá lấy mã truy cập và gửi thông báo

Để gửi thông báo đẩy thông qua Actions API, bạn cần đổi khoá tài khoản dịch vụ để lấy mã truy cập. Bạn nên sử dụng thư viện ứng dụng API của Google cho trường hợp này. Trong loạt đoạn mã tiếp theo, chúng ta sử dụng thư viện ứng dụng Node.js API của Google.

  1. Cài đặt thư viện ứng dụng Google API và yêu cầu:

    npm install googleapis request --save

  2. Sử dụng mã sau để nhận mã truy cập từ khoá tài khoản dịch vụ và gửi thông báo đẩy:

    // Use the Actions API to send a Google Assistant push notification.
    let client = auth.fromJSON(require('./service-account.json'));
    client.scopes = ['https://www.googleapis.com/auth/actions.fulfillment.conversation'];
    let notification = {
      userNotification: {
        title: 'Example notification title',
      },
      target: {
        userId: '<UPDATES_USER_ID>',
        intent: 'Notifications Intent',
      },
    };
    client.authorize((err, tokens) => {
      if (err) {
        throw new Error('Auth error: ${err}');
      }
      request.post('https://actions.googleapis.com/v2/conversations:send', {
        'auth': {
          'bearer': tokens.access_token,
        },
        'json': true,
        'body': {'customPushMessage': notification, 'isInSandbox': true},
      }, (err, httpResponse, body) => {
        if (err) {
          throw new Error('API request error: ${err}');
        }
        console.log('${httpResponse.statusCode}: ' + '${httpResponse.statusMessage}');
        console.log(JSON.stringify(body));
      });
    });