Menerima pesan

Setelah mendaftar ke Business Message, Anda dapat menerima pesan atas nama agen pengujian. Anda dapat menerima pesan untuk merek yang Anda kelola setelah Anda membuat, memverifikasi, dan meluncurkan agen untuk merek tersebut.

Saat pelanggan mengirim pesan ke agen yang Anda kelola, Business Messages mengirimkan payload JSON ke webhook Anda yang berisi berbagai ID, konten pesan, dan informasi lokasi.

Gunakan halaman log Business Developer Communications Developer untuk men-debug masalah pengiriman pesan.

Menangani pesan masuk

Cara agen Anda menangani dan merespons pesan dari pengguna sangat bergantung pada logika bisnis Anda. Namun, secara umum, langkah-langkah untuk merespons pesan pengguna konsisten.

Menyatakan penerimaan pesan

Untuk mengonfirmasi pesan yang diterima oleh webhook Anda, tampilkan respons HTTP yang valid untuk pesan yang dikirim ke webhook Anda.

Jika pesan gagal dikirim karena waktu tunggu pengiriman, jangkauan webhook, pengalihan, atau izin, Google akan menyimpan dan meneruskan pesan, dengan beberapa percobaan ulang, selama 7 hari atau hingga webhook Anda berhasil menerima pesan.

Memverifikasi bahwa pesan berasal dari Google

Anda harus memverifikasi bahwa Google mengirim pesan sebelum memproses konten pesan.

Untuk memverifikasi bahwa Google telah mengirim pesan yang Anda terima,

  1. Uraikan header X-Goog-Signature pesan. Ini adalah salinan payload isi pesan berenkode base64.
  2. Dengan menggunakan token klien (yang ditampilkan saat Anda mengonfigurasi webhook) sebagai kunci, buat HMAC SHA512 byte payload pesan dan enkripsikan hasilnya ke base64.

  3. Bandingkan hash X-Goog-Signature dengan hash yang Anda buat.

    • Jika hash tersebut cocok, Anda telah mengonfirmasi bahwa Google mengirim pesan.
    • Jika hash-nya tidak cocok, periksa proses hashing pada pesan yang diketahui dengan baik. Jika proses hashing Anda berfungsi dengan benar dan Anda menerima pesan yang diyakini menipu Anda, hubungi kami (Anda harus login dengan akun Google Message Bisnis).

Lihat contoh verifikasi pesan dalam repositori GitHub untuk Echo Bot di Java, Node.js, dan Python.

Identifikasi lokal

Pengguna berkomunikasi dari banyak lokasi dan dalam banyak bahasa. Business Messages mewakili preferensi bahasa pengguna dengan kolom resolvedLocale dan userDeviceLocale, yang didasarkan pada setelan lokal perangkat mereka. Lihat Pelokalan dan lokal.

Jika memungkinkan, arahkan pesan dan tulis respons berdasarkan preferensi bahasa pengguna.

Merutekan pesan berdasarkan konteksnya

Konteks pesan menginformasikan jenis informasi yang mungkin dicari pengguna. Misalnya, jika mengirim pesan dengan nilai placeId, mereka akan mengirim pesan ke lokasi tertentu (yang diidentifikasi oleh placeId) dan kemungkinan untuk mengajukan pertanyaan khusus lokasi. Demikian pula, jika pesan memiliki nilai nearPlaceId, yang mengidentifikasi lokasi di dekat pengguna, pengguna tersebut mungkin ingin mengetahui informasi khusus lokasi, tetapi agen harus mengonfirmasi lokasi yang ingin diajak chat oleh pengguna sebelum memulai percakapan.

Dengan informasi konteks pesan, arahkan pesan ke lokasi yang paling sesuai untuk merespons:

  • Jika pesan berada dalam percakapan baru dan merupakan pertanyaan umum, Anda dapat menjawabnya dengan otomatisasi.
  • Jika otomatisasi tidak dapat menangani pertanyaan ini, arahkan ke agen langsung.
  • Jika lokal pesan tidak cocok dengan lokal default agen Anda, arahkan pesan ke agen langsung yang dapat mendukung lokal tersebut.
  • Jika pertanyaan berhubungan dengan lokasi tertentu, arahkan pertanyaan kepada seseorang yang memiliki informasi tentang lokasi tersebut.
  • Jika pesan berada dalam percakapan yang sedang berlangsung, arahkan pesan tersebut ke agen langsung yang berpartisipasi dalam percakapan.

Identifikasi jenis pesan yang dikirim pengguna

Pengguna dapat mengirim tiga jenis pesan:

  • Pesan teks adalah respons bentuk bebas.
  • Pesan Image mencakup URL yang ditandatangani untuk gambar yang diupload pengguna.
  • Pesan Saran mencakup data postback dan teks tindakan yang disarankan atau balasan yang disarankan yang diketuk pengguna.

Memproses konten pesan

Jika agen Anda menggunakan otomatisasi, konten pesan pengguna harus memandu logika agen Anda dan respons berikutnya dalam percakapan.

Cara termudah untuk mengidentifikasi intent pengguna adalah dengan data postback dari balasan yang disarankan atau tindakan yang disarankan. Terlepas dari teks yang terkait dengan saran, data postback dapat dibaca mesin.

Jika pengguna mengirim SMS, agen Anda mungkin mengurai respons untuk kata kunci yang didukung atau menggunakan pemahaman bahasa yang alami (seperti dengan integrasi Dialogflow untuk memproses pesan pengguna dan mengidentifikasi jalur ke depan.

Jika tidak tahu cara merespons pesan pengguna, agen Anda akan merespons dengan status error dan mencoba melanjutkan percakapan dengan meminta informasi tambahan kepada pengguna, dengan meminta input dengan cara yang berbeda, atau dengan menyerahkan percakapan kepada agen langsung.

Merespons pengguna

Setelah mengidentifikasi respons yang tepat, baik melalui otomatisasi atau agen langsung, agen akan mengirim pesan dan melanjutkan percakapan dengan pengguna.

Saat menulis respons, pertimbangkan lokalitas pengguna. Anda juga dapat menyesuaikan respons dengan mengambil nilai dari objek userInfo di setiap pesan yang Anda terima.

Jenis pesan

Kode berikut menunjukkan cara agen Anda menerima pesan.

Untuk informasi pemformatan dan nilai, lihat UserMessage.

Teks

Cara paling umum bagi pengguna untuk merespons adalah dengan teks biasa. Pesan teks memiliki format berikut.

{
  "agent": "brands/BRAND_ID/agents/AGENT_ID",
  "conversationId": "CONVERSATION_ID",
  "customAgentId": "CUSTOM_AGENT_ID",
  "requestId": "REQUEST_ID",
  "message": {
    "messageId": "MESSAGE_ID",
    "name": "conversations/CONVERSATION_ID/messages/MESSAGE_ID",
    "text": "MESSAGE_TEXT",
    "createTime": "MESSAGE_CREATE_TIME",
  },
  "dialogflowResponse": {
    "autoResponded": "BOOLEAN",
    "faqResponse": {
      "userQuestion": "USER_QUESTION",
      "answers": [{
        "faqQuestion": "FAQ_QUESTION",
        "faqAnswer": "FAQ_ANSWER",
        "matchConfidenceLevel": "CONFIDENCE_LEVEL",
        "matchConfidence": "CONFIDENCE_NUMERIC",
      }],
    },
  },
  "context": {
    "entryPoint": "CONVERSATION_ENTRYPOINT",
    "placeId": "LOCATION_PLACE_ID",
    "resolvedLocale": "MATCH_OF_USER_AND_AGENT_LOCALES",
    "userInfo": {
      "displayName": "USER_NAME",
      "userDeviceLocale": "USER_LOCALE",
    },
  },
  "sendTime": "SEND_TIME",
}

Untuk opsi pemformatan dan nilai, lihat Message.

Image

Selain mengirim SMS, pengguna dapat mengirim gambar ke agen Anda sebagai pesan. Business Messages menyimpan gambar yang dibagikan, selama 7 hari, di URL bertanda tangan dan menyertakan URL tersebut di kolom text payload pesan.

Jika agen Anda menyertakan otomatisasi, pastikan otomatisasi mengetahui cara merespons jika pengguna membagikan gambar. Untuk agen langsung, pastikan bahwa gambar diteruskan atau URL dalam pesan dapat diklik.

...
"message": {
    "text": "https://storage.googleapis.com/business-messages-us/936640919331/jzsu6cdguNGsBhmGJGuLs1DS?x-goog-algorithm\u003dGOOG4-RSA-SHA256\u0026x-goog-credential\u003duranium%40rcs-uranium.iam.gserviceaccount.com%2F20190826%2Fauto%2Fstorage%2Fgoog4_request\u0026x-goog-date\u003d20190826T201038Z\u0026x-goog-expires\u003d604800\u0026x-goog-signedheaders\u003dhost\u0026x-goog-signature\u003d89dbf7a74d21ab42ad25be071b37840a544a43d68e67270382054e1442d375b0b53d15496dbba12896b9d88a6501cac03b5cfca45d789da3e0cae75b050a89d8f54c1ffb27e467bd6ba1d146b7d42e30504c295c5c372a46e44728f554ba74b7b99bd9c6d3ed45f18588ed1b04522af1a47330cff73a711a6a8c65bb15e3289f480486f6695127e1014727cac949e284a7f74afd8220840159c589d48dddef1cc97b248dfc34802570448242eac4d7190b1b10a008404a330b4ff6f9656fa84e87f9a18ab59dc9b91e54ad11ffdc0ad1dc9d1ccc7855c0d263d93fce6f999971ec79879f922b582cf3bb196a1fedc3eefa226bb412e49af7dfd91cc072608e98"
  }
...

Untuk opsi pemformatan dan nilai, lihat Message.

Saran

Balasan yang disarankan dan tindakan yang disarankan memungkinkan pengguna merespons atau melakukan tindakan dengan sekali ketuk. Saat pengguna mengetuk saran, agen akan menerima payload dengan teks saran dan data postback.

Pesan saran memiliki format berikut.

{
  "agent": "brands/BRAND_ID/agents/AGENT_ID",
  "conversationId": "CONVERSATION_ID",
  "customAgentId": "CUSTOM_AGENT_ID",
  "requestId": "REQUEST_ID",
  "suggestionResponse": {
    "message": "conversations/CONVERSATION_ID/messages/MESSAGE_ID",
    "postbackData": "POSTBACK_DATA",
    "createTime": "RESPONSE_CREATE_TIME",
    "text": "SUGGESTION_TEXT",
    "suggestionType": "SUGGESTION_TYPE",
  }
  "context": {
    "entryPoint": "CONVERSATION_ENTRYPOINT",
    "placeId": "LOCATION_PLACE_ID",
    "resolvedLocale": "MATCH_OF_USER_AND_AGENT_LOCALES",
    "userInfo": {
      "displayName": "USER_NAME",
      "userDeviceLocale": "USER_LOCALE",
    },
  },
  "sendTime": "SEND_TIME",
}

Untuk opsi pemformatan dan nilai, lihat SuggestionResponse.

Permintaan autentikasi

Saran permintaan Authentication memungkinkan pengguna login dengan penyedia OAuth untuk memberikan detail identitas kepada agen atau mengizinkan agen melakukan tindakan atas nama pengguna. Lihat Mengautentikasi dengan OAuth.

Jika pengguna berhasil login dengan penyedia OAuth yang ditetapkan, agen akan menerima payload dengan kode otorisasi. Jika pengguna tidak berhasil login, agen akan menerima payload dengan detail error.

Pesan permintaan autentikasi memiliki format berikut.

{
  "agent": "brands/BRAND_ID/agents/AGENT_ID",
  "conversationId": "CONVERSATION_ID",
  "customAgentId": "CUSTOM_AGENT_ID",
  "requestId": "REQUEST_ID",
  "authenticationResponse": {
    "code": "AUTHORIZATION_CODE",
    "redirect_uri": "REDIRECT_URI",
    "errorDetails": {
      "error": "ERROR",
      "errorDescription": "ERROR_DESCRIPTION",
    },
  }
  "context": {
    "entryPoint": "CONVERSATION_ENTRYPOINT",
    "placeId": "LOCATION_PLACE_ID",
    "resolvedLocale": "MATCH_OF_USER_AND_AGENT_LOCALES",
    "userInfo": {
      "displayName": "USER_NAME",
      "userDeviceLocale": "USER_LOCALE",
    },
  },
  "sendTime": "SEND_TIME",
}

Untuk opsi pemformatan dan nilai, lihat AuthenticationResponse.

Konteks pesan

Setiap pesan berisi informasi konteks tentang asal pesan tersebut.

...
  "context": {
    "customContext": "CUSTOM_CONTEXT",
    "entryPoint": "CONVERSATION_ENTRYPOINT",
    "placeId": "LOCATION_PLACE_ID",
    "nearPlaceId": "NEARBY_LOCATION_PLACE_ID",
    "deflectedPhoneNumber": "DEFLECTED_PHONE_NUMBER",
    "resolvedLocale": "MATCH_OF_USER_AND_AGENT_LOCALES",
    "userInfo": {
      "displayName": "USER_NAME",
      "userDeviceLocale": "USER_LOCALE",
    },
    "widget": {
      "url": "WEBSITE_URL",
      "widgetContext": "WIDGET_CONTEXT",
    },
  },
...
Kolom Deskripsi
customContext Data konteks yang ditentukan oleh partner.
entryPoint Platform pesan yang digunakan untuk memulai percakapan, seperti yang ditentukan oleh EntryPoint.
placeId ID unik dari database Google Places untuk lokasi yang dikirimi pesan oleh pengguna. Ini hanya muncul dalam pesan dari titik entri khusus lokasi.
nearPlaceId ID unik dari database Google Places untuk lokasi pertama dalam Paket Lokal. Konfirmasikan lokasi tempat pengguna ingin melakukan chat saat Anda menerima nilai nearPlaceId.
deflectedPhoneNumber Nomor telepon yang dideteksi oleh Business Messages mencegah pengguna menelepon saat percakapan dimulai.
resolvedLocale

Kecocokan terbaik yang dihitung dari lokal pengguna (dilaporkan dalam userDeviceLocale) dan lokal yang didukung agen (ditentukan oleh setelan percakapan yang ditentukan). Lihat Pelokalan dan Memulai percakapan.

Nilai lokal adalah tag bahasa IETF BCP 47 yang terbentuk dengan baik.

userInfo.displayName Nama pengguna yang mengirim pesan. Jika pengguna memilih tidak membagikan identitas, kolom ini akan kosong.
userInfo.userDeviceLocale Lokalitas pengguna, yang dilaporkan oleh perangkat mereka, sebagai tag bahasa IETF BCP 47 yang terbentuk dengan baik.
widget.url URL situs tempat platform percakapan diluncurkan.
widget.widgetContext Nilai atribut data-bm-widget-context widget yang digunakan untuk memulai percakapan.

Histori percakapan

Google tidak menyediakan histori percakapan. Kelola percakapan historis Anda sendiri, dengan mematuhi kebijakan privasi dan praktik terbaik Anda, sehingga Anda dapat mengirimkan respons yang tepat untuk pesan berikutnya dari pengguna.