Bu bölümde Actions on Google'ın Dialogflow v2 aracılığıyla sipariş karşılama.
Eylemler oluşturmak için Dialogflow'u kullanıyorsanız sipariş karşılama Dialogflow ile iletişim kurmak için Actions on Google sohbet webhook'u biçimi. Dialogflow webhook biçimi şirketine ait tüm bilgiler ileti dizisi webhook'u biçimi Dialogflow'a özel ek veriler (örneğin, bağlam ve parametrelerdir.
Dialogflow webhook'ları için JSON mesajlarıyla ilgili daha fazla örnek görmek isterseniz bu GitHub projesine göz atabilirsiniz.
İstek içeriği
Gönderilen istek mesajı, Dialogflow, Dialogflow webhook biçiminde veriler içerir. Bu nesne şunları içerir: Google'a özel bilgiler üzerinde yapılan işlemler (aşağıda özetlenmiştir):
originalDetectIntentRequest.source
değeri "google".originalDetectIntentRequest.version
, Actions on Google'ı belirtir sürümünü kullanın.originalDetectIntentRequest.payload
, Google'a özel önemli İşlemler içeriyor ve hatta görüşme esnasında istek Asistan'dan JSON.Conversation.conversationToken
alanı Dialogflow webhook tarafından desteklenmiyor kabul edersiniz. Bunun yerine, sipariş karşılama işleminiz için bir Dialogflow kullanabilir bağlamı da kullanabilirsiniz. konuşma süresi.
Basit çağrı isteği örneği
Aşağıdaki snippet'te Dialogflow'daki bir çağrı isteği örneği gösterilmektedir webhook biçiminde olur.
{
"responseId": "c4b863dd-aafe-41ad-a115-91736b665cb9",
"queryResult": {
"queryText": "GOOGLE_ASSISTANT_WELCOME",
"action": "input.welcome",
"parameters": {},
"allRequiredParamsPresent": true,
"fulfillmentText": "",
"fulfillmentMessages": [],
"outputContexts": [
{
"name": "projects/${PROJECTID}/agent/sessions/${SESSIONID}/contexts/google_assistant_welcome"
},
{
"name": "projects/${PROJECTID}/agent/sessions/${SESSIONID}/contexts/actions_capability_screen_output"
},
{
"name": "projects/${PROJECTID}/agent/sessions/${SESSIONID}/contexts/google_assistant_input_type_voice"
},
{
"name": "projects/${PROJECTID}/agent/sessions/${SESSIONID}/contexts/actions_capability_audio_output"
},
{
"name": "projects/${PROJECTID}/agent/sessions/${SESSIONID}/contexts/actions_capability_web_browser"
},
{
"name": "projects/${PROJECTID}/agent/sessions/${SESSIONID}/contexts/actions_capability_media_response_audio"
}
],
"intent": {
"name": "projects/${PROJECTID}/agent/intents/8b006880-0af7-4ec9-a4c3-1cc503ea8260",
"displayName": "Default Welcome Intent"
},
"intentDetectionConfidence": 1,
"diagnosticInfo": {},
"languageCode": "en-us"
},
"originalDetectIntentRequest": {
"source": "google",
"version": "2",
"payload": {
"isInSandbox": true,
"surface": {
"capabilities": [
{
"name": "actions.capability.SCREEN_OUTPUT"
},
{
"name": "actions.capability.AUDIO_OUTPUT"
},
{
"name": "actions.capability.WEB_BROWSER"
},
{
"name": "actions.capability.MEDIA_RESPONSE_AUDIO"
}
]
},
"inputs": [
{
"rawInputs": [
{
"query": "Talk to my test app",
"inputType": "VOICE"
}
],
"intent": "actions.intent.MAIN"
}
],
"user": {
"lastSeen": "2018-03-16T22:08:48Z",
"permissions": [
"UPDATE"
],
"locale": "en-US",
"userId": "ABwppHEvwoXs18xBNzumk18p5h02bhRDp_riW0kTZKYdxB6-LfP3BJRjgPjHf1xqy1lxqS2uL8Z36gT6JLXSrSCZ"
},
"conversation": {
"conversationId": "${SESSIONID}",
"type": "NEW"
},
"availableSurfaces": [
{
"capabilities": [
{
"name": "actions.capability.SCREEN_OUTPUT"
},
{
"name": "actions.capability.AUDIO_OUTPUT"
}
]
}
]
}
},
"session": "projects/${PROJECTID}/agent/sessions/${SESSIONID}"
}
Basit görüşme isteği örneği
Aşağıdaki snippet'te Dialogflow'daki bir sohbet isteği örneği gösterilmektedir. webhook biçiminde olmalıdır. Burada kullanıcı girişi bir metin dizesidir.
{
"responseId": "68efa569-4ba1-4b7f-9b1b-ac2865deb539",
"queryResult": {
"queryText": "query from the user",
"action": "action.name.of.matched.dialogflow.intent",
"parameters": {},
"allRequiredParamsPresent": true,
"outputContexts": [
{
"name": "projects/${PROJECTID}/agent/sessions/${SESSIONID}/contexts/actions_capability_screen_output"
},
{
"name": "projects/${PROJECTID}/agent/sessions/${SESSIONID}/contexts/actions_capability_audio_output"
},
{
"name": "projects/${PROJECTID}/agent/sessions/${SESSIONID}/contexts/google_assistant_input_type_keyboard"
},
{
"name": "projects/${PROJECTID}/agent/sessions/${SESSIONID}/contexts/actions_capability_media_response_audio"
},
{
"name": "projects/${PROJECTID}/agent/sessions/${SESSIONID}/contexts/actions_capability_web_browser"
}
],
"intent": {
"name": "projects/${PROJECTID}/agent/intents/1f4e5bd9-a670-4161-a22e-2c97b077f29f",
"displayName": "Name of Dialogflow Intent"
},
"intentDetectionConfidence": 1,
"diagnosticInfo": {},
"languageCode": "en-us"
},
"originalDetectIntentRequest": {
"source": "google",
"version": "2",
"payload": {
"isInSandbox": true,
"surface": {
"capabilities": [
{
"name": "actions.capability.SCREEN_OUTPUT"
},
{
"name": "actions.capability.AUDIO_OUTPUT"
},
{
"name": "actions.capability.WEB_BROWSER"
},
{
"name": "actions.capability.MEDIA_RESPONSE_AUDIO"
}
]
},
"inputs": [
{
"rawInputs": [
{
"query": "query from the user",
"inputType": "KEYBOARD"
}
],
"arguments": [
{
"rawText": "query from the user",
"textValue": "query from the user",
"name": "text"
}
],
"intent": "actions.intent.TEXT"
}
],
"user": {
"lastSeen": "2017-10-06T01:06:56Z",
"locale": "en-US",
"userId": "AI_yXq-AtrRh3mJX5D-G0MsVhqun"
},
"conversation": {
"conversationId": "1522951193000",
"type": "ACTIVE",
"conversationToken": "[]"
},
"availableSurfaces": [
{
"capabilities": [
{
"name": "actions.capability.SCREEN_OUTPUT"
},
{
"name": "actions.capability.AUDIO_OUTPUT"
}
]
}
]
}
},
"session": "projects/${PROJECTID}/agent/sessions/${SESSIONID}"
}
Yardımcı sonucu örneği
Aşağıdaki snippet'te Dialogflow webhook biçimindeki yardımcı sonuç örneği gösterilmektedir. Bu örnekte, webhook Asistan'a kullanıcının onayını alması gerektiğini belirttikten sonra kullanıcının verdiği yanıt gösterilmektedir.
{
"responseId": "cb6f5ec2-c26e-4349-b561-a9ddd6a0e495",
"queryResult": {
"queryText": "actions_intent_CONFIRMATION",
"action": "Dialogflow action name of matched intent",
"parameters": {},
"allRequiredParamsPresent": true,
"outputContexts": [
{
"name": "projects/${PROJECTID}/agent/sessions/${SESSIONID}/contexts/actions_intent_confirmation",
"parameters": {
"CONFIRMATION": true
}
}
],
"intent": {
"name": "projects/${PROJECTID}/agent/intents/1777d616-a5f7-4838-a9a9-870f2956bd14",
"displayName": "Dialogflow action name of matched intent"
},
"intentDetectionConfidence": 1,
"diagnosticInfo": {},
"languageCode": "en-us"
},
"originalDetectIntentRequest": {
"source": "google",
"version": "2",
"payload": {
"isInSandbox": true,
"surface": {},
"inputs": [
{
"rawInputs": [
{
"query": "yes",
"inputType": "VOICE"
}
],
"arguments": [
{
"name": "CONFIRMATION",
"boolValue": true
}
],
"intent": "actions.intent.CONFIRMATION"
}
],
"user": {},
"conversation": {},
"availableSurfaces": []
}
},
"session": "projects/${PROJECTID}/agent/sessions/${SESSIONID}"
}
Yanıt gövdesi
Karşılama uç noktanızdaki HTTP gönderilerinin başlığındaki Content-Type
Asistan, application/json
olmalıdır.
İstek karşılama işleminizin Dialogflow'a gönderdiği yanıt mesajı şurada olmalıdır: Dialogflow webhook biçimini kullanın.
Asistan'la iletişim kurarken yanıtınızda genellikle payload
yer alır
"google
" etiketini içeren nesne nesnesini tanımlayın. "google
" yük nesnesi şunları içerir:
Actions on Google'a özel bilgiler En azından bir
expectUserResponse
alanı ve richResponse
veya systemIntent
alanı.
"google
" için önemli alanlar yük nesnesi aşağıda özetlenmiştir:
Alan | Açıklama |
---|---|
expectUserResponse |
Karşılamanızın kullanıcı yanıtı bekleyip beklemediğini belirtir. Değeri şu şekilde ayarla:
true Görüşmenin ne zaman devam edeceği ve false için sona ereceği zaman
tercih edebilirsiniz. |
userStorage |
Belirli bir kullanıcıya bağlı kalıcı verileri depolar. Toplam depolama alanı miktarı 10.000 bayttır. |
richResponse |
Bu alan ses, metin, kart, öneri veya yapılandırılmış veri içeriyor Asistan'ın oluşturması için kullanılır. Şu etkinlik için zengin yanıtları kullanma hakkında daha fazla bilgi edinmek istiyorsanız: Actions on Google'a göz atın Zengin yanıtlar |
systemIntent |
Bu alan
ExpectedInput.possibleIntents Yanıtınızda genelde
systemIntent Sipariş karşılama işleminizde
bir yardımcı amacıdır. systemIntent içindeki possibleIntents alanı, inputValueData alan adının data olarak değiştirilmesiyle birlikte bir ExpectedIntent nesnesine ayarlanmalıdır.
|
ExpectedIntent
içinde
nesne için şu değerleri belirtirsiniz:
- intent: istediğiniz bilgileri ve
- data: Bir değer spesifikasyonu; Google Asistan'ın yardımcıyı yürütmesi için gereklidir.
Örneğin, kullanıcıdan izin istiyorsanız intent
öğesini şuna ayarlayın:
actions.intent.PERMISSSION
ve data
için değer spesifikasyonuna
"@type": "type.googleapis.com/google.actions.v2.PermissionValueSpec"
ve şuna ilişkin alanlar:
işleyeceğiz.
Aşağıdaki listede, bir
Dialogflow webhook yanıtı için systemIntent
. Actions on Google amaçlarının tam listesi için
için bkz.
Intents referansı.
Amaç Adı | Dialogflow Etkinliği Adı | Değer Spesifikasyonu | Açıklama |
---|---|---|---|
actions.intent.CONFIRMATION
|
actions_intent_CONFIRMATION |
"@type": "type.googleapis.com/google.actions.v2.ConfirmationValueSpec"
|
Kullanıcıdan onay alır (örneğin, cevabı evet veya hayır olan bir soru). |
actions.intent.DATETIME
|
actions_intent_DATETIME |
"@type": "type.googleapis.com/google.actions.v2.DateTimeValueSpec"
|
Kullanıcının tarih ve saat girişini alır. |
actions.intent.DELIVERY_ADDRESS
|
actions_intent_DELIVERY_ADDRESS |
"@type": "type.googleapis.com/google.actions.v2.DeliveryAddressValueSpec"
|
Kullanıcının teslimat adresi girişini alır. |
actions.intent.LINK
|
actions_intent_LINK |
"@type": "type.googleapis.com/google.actions.v2.LinkValueSpec"
|
Bir Android uygulamasına derin bağlantı akışı ister. |
actions.intent.OPTION
|
actions_intent_OPTION |
"@type": "type.googleapis.com/google.actions.v2.OptionValueSpec"
|
Seçili öğeyi bir liste veya bant kullanıcı arayüzünden alır. |
actions.intent.PERMISSION
|
actions_intent_PERMISSION |
"@type": "type.googleapis.com/google.actions.v2.PermissionValueSpec"
|
Kullanıcının tam adı, yaklaşık konumu veya tam konum. |
actions.intent.SIGN_IN
|
actions_intent_SIGN_IN |
"@type": "type.googleapis.com/google.actions.v2.SignInValueSpec"
|
Kullanıcının hesabını bağlamak için hesap bağlama akışı ister. |
Basit yanıt örneği
Aşağıdaki snippet'te Dialogflow'daki basit bir yanıt örneği gösterilmektedir webhook biçiminde olur.
{
"payload": {
"google": {
"expectUserResponse": true,
"richResponse": {
"items": [
{
"simpleResponse": {
"textToSpeech": "this is a simple response"
}
}
]
}
}
}
}
Yardımcı örneği
Aşağıdaki snippet'te Dialogflow'da yardımcı amaç kullanmaya dair bir örnek gösterilmektedir
webhook biçiminde olur. Bu örnekte, webhook'unuz
actions.intent.OPTIONS
yardımcısının, Asistan'a bir
iki seçenek arasında seçim yapar.
{
"payload": {
"google": {
"expectUserResponse": true,
"richResponse": {
"items": [
{
"simpleResponse": {
"textToSpeech": "Choose a item"
}
}
]
},
"systemIntent": {
"intent": "actions.intent.OPTION",
"data": {
"@type": "type.googleapis.com/google.actions.v2.OptionValueSpec",
"listSelect": {
"title": "Hello",
"items": [
{
"optionInfo": {
"key": "first title key"
},
"description": "first description",
"image": {
"url": "/assistant/images/badges/XPM_BADGING_GoogleAssistant_VER.png",
"accessibilityText": "first alt"
},
"title": "first title"
},
{
"optionInfo": {
"key": "second"
},
"description": "second description",
"image": {
"url": "https://lh3.googleusercontent.com/Nu3a6F80WfixUqf_ec_vgXy_c0-0r4VLJRXjVFF_X_CIilEu8B9fT35qyTEj_PEsKw",
"accessibilityText": "second alt"
},
"title": "second title"
}
]
}
}
}
}
}
}
Asistan, önceki örnekteki mesajı aldığında geçici olarak konuyu ele alır ve ondan duruma göre seçim yapmasını ister. tercih edebilirsiniz. Asistan, gerekli tüm kullanıcı girişlerini topladıktan sonra bu yardımcı sonucu bir Dialogflow webhook isteğindeki karşılamanıza geri gönderir.
Aşağıdaki snippet'te, kullanıcı seçimi seçimiyle yardımcı sonucun bir örneği gösterilmektedir.
{
"responseId": "ea166558-615a-48f3-ae5b-7f55d895784b",
"queryResult": {
"queryText": "actions_intent_OPTION",
"action": "",
"parameters": {},
"allRequiredParamsPresent": true,
"fulfillmentText": "",
"fulfillmentMessages": [],
"outputContexts": [
{
"name": "projects/${PROJECTID}/agent/sessions/${SESSIONID}/contexts/actions_intent_option",
"parameters": {
"OPTION": "key of selected item"
}
}
],
"intent": {
"name": "projects/${PROJECTID}/agent/intents/1777d616-a5f7-4838-a9a9-870f2956bd14",
"displayName": "Dialogflow intent name of matched intent"
},
"intentDetectionConfidence": 1,
"diagnosticInfo": {},
"languageCode": "en-us"
},
"originalDetectIntentRequest": {
"source": "google",
"version": "2",
"payload": {
"isInSandbox": true,
"surface": {
"capabilities": []
},
"inputs": [
{
"rawInputs": [
{
"query": "Title of selected item",
"inputType": "TOUCH"
}
],
"arguments": [
{
"textValue": "Key of selected item",
"name": "OPTION"
}
],
"intent": "actions.intent.OPTION"
}
],
"user": {},
"conversation": {},
"availableSurfaces": []
}
},
"session": "projects/${PROJECTID}/agent/sessions/${SESSIONID}"
}
İleti dizisini sonlandırma örneği
Aşağıdaki snippet'te, bir ileti dizisini sonlandırmak için basit bir yanıt örneği gösterilmektedir
oturumunda görüntüleyebilirsiniz. İlgili içeriği oluşturmak için kullanılan
expectUserResponse
Asistan'a gönderilen yanıt mesajı sinyallerindeki false
değeri
bunun beklendiğini ve geçerli tüm etkinliklerin
yardımcı olur.
{
"payload": {
"google": {
"expectUserResponse": false,
"richResponse": {
"items": [
{
"simpleResponse": {
"textToSpeech": "Goodbye!"
}
}
]
}
}
}
}
Kullanıcılar bir standardı çağırdığında varsayılan davranışın nasıl geçersiz kılınacağını öğrenmek için konuşmayı bitirmek için konuşmaya, ileti dizisi çıkışları rehberini inceleyin.