Müşteriler yemek siparişini verdikten sonra şu adrese sipariş güncelleme mesajı gönderebilirsiniz: baştan sona Sipariş hizmetini kullanarak bize bildirebilirsiniz.
Sipariş güncellemelerinin gönderilmesiyle ilgili bazı yaygın nedenler şunlardır:
- Siparişin tahmini sipariş karşılama süresi kullanılabilir hale gelir veya sipariş değişir.
- Siparişin durumu değişir.
- Sipariş artık yerine getirilemiyor.
- Siparişe dahil edilen bir menü öğesinin fiyatı değişti.
- Müşteri, siparişini yönetebileceği yeni bir yönteme (ör. müşteri desteği) sahip olur veya restoranın telefon numarası.
- Siparişin makbuzu hazır hale gelir.
Sonraki bölümlerde bu farklı senaryoların nasıl ele alınacağına ilişkin ayrıntılar sunulmaktadır sipariş güncellemeleri kullanarak yapabilirsiniz.
Geçiş sırası durumları
Bir siparişin altı olası durumu vardır. Bu durumlar ve olası geçişleri aşağıdaki şemada özetlenmiştir:
Bir müşteri ilk siparişi gönderdiğinde sipariş,
CREATED
, CONFIRMED
veya REJECTED
. Şu adrese sipariş güncelleme mesajı gönderebilirsiniz:
durum geçişi geçerli olduğu sürece bir siparişin durumunu güncelleyebilir. CREATED
.
durum, iş ortağının platformu siparişi onaylayamadığında veya reddedemediğinde kullanılır
hemen teslim edebilirsiniz. Örnek kullanım alanı, müşterinin teslimat aracılığıyla sipariş vermesidir.
toplayıcıdır. Teslimat hizmeti, Google'dan teslimatı alır.
bilgileri restorana gönderir. Restoran,
ürünü teslim aldıktan sonra
ve sipariş stok durumunu onayladıysanız durum artık CONFIRMED
olabilir. Aksi takdirde
REJECTED
.
CONFIRMED
durumundaki bir sıra, IN_PREPARATION
durumuna taşınır. Siparişin teslim alma veya teslimat için olmasına bağlı olarak, sonraki adımda READY_FOR_PICKUP
ya da IN_TRANSIT
durumunu kullanın. Yemek teslim edildiğinde veya teslim alındığında, sipariş FULFILLED
durumuna ayarlanır.
Müşterilerin siparişleri iptal etmesine izin veriyorsanız CANCELLED
durumunu kullanabilirsiniz. Bir sipariş CREATED
, CONFIRMED
, IN_PREPARATION
, READY_FOR_PICKUP
veya IN_TRANSIT
durumundayken iptal edilebilir.
Uçtan uca Sipariş hizmetiniz
iptal politikası ve iptal sırasındaki ödemelerin durumu
Uçtan uca sipariş hizmetinizin mevcut tüm eyaletleri desteklemesi gerekmez
daha fazla bilgi edineceksiniz. Ancak siparişin son durumu FULFILLED
olmalıdır.
REJECTED
veya CANCELLED
.
Tahmini bir sipariş karşılama süresi sağlama
Kullanıcılara, siparişlerinin ne zaman teslim edileceğine ilişkin tahmini bir zaman aralığı belirtebilirsiniz
teslim alınmaya hazır (veya teslim edilmiş) olmalıdır. estimatedFulfillmentTimeIso8601
alanını kullanın
bir zaman aralığını belirlemek üzere FoodOrderUpdateExtension
siparişi teslim alınmaya hazır olur veya teslim edilir.
estimatedFulfillmentTimeIso8601
şu zamanlarda gönderilir:
- Tahmini süre kullanılabilir hale geldiğinde, ideal olarak
CREATED
veyaCONFIRMED
durumu. - Tahmini süre değiştiğinde (ör. tahmini sürenin güncellenmesi)
bu sipariş
IN_TRANSIT
olduğunda daha doğrudur.
Kullanıcı beklentilerini etkili bir şekilde yönetmek için, tahminleriniz konusunda muhafazakar olun. Sabit bir tarih ve saat yerine bir tarih ve saat aralığı sağlamaları gerekir. Şunları yapmalısınız: mümkünse trafik koşulları gibi varyasyonları hesaba katmak için kullanılır. Örneğin, örneğin, 12:45’e (alt sınır) tahmini 13:15’e (üst sınır) bağlı) için tahmini teslimat süresi 13:00 olan bir sipariş içindir.
Sipariş yönetimi işlemleri sağlama
Sipariş güncellemesi gönderirken müşterilere yardımcı olan kaynaklar sağlayabilirsiniz
siparişlerini OrderManagementAction
biçiminde yönetmelerine olanak tanır. Ardından
Sipariş verdiğinde müşterinin sizinle veya restoranla iletişime geçmesi gerekebilir.
sipariş karşılamayı tamamlama, sipariş ilerlemeyi takip etme, değişiklik yapma veya siparişlerini iptal etme.
OrderManagementAction
, müşterilerin bir ürüne e-posta göndermesine, aramasına veya
URL'sini doğrudan cihazlarından yükleyebilir. Aynı bilgileri
adresine gönderdiğiniz e-posta sipariş onayındaki gibi OrderManagementAction
belirtir.
Sipariş yönetimi işlemleri aşağıdaki türleri içerir:
CUSTOMER_SERVICE
: Müşterilere, müşterilerle iletişime geçebilecekleri bir işlem sunun geliştirmenizi sağlar. Bu yönetim işlemi türü, sipariş güncellemeleri için gereklidir.EMAIL
: Müşterilere, sağlanan adrese e-posta gönderebilecekleri bir işlem sunun. e-posta adresi.CALL
: Müşterilere, verilen telefon numarasını arayabilecekleri bir işlem sunun.VIEW_DETAIL
: Müşterilere, ayrıntılarını görüntülemelerini sağlayacak bir işlem sunun sipariş.
Her sipariş güncellemesi en az bir sipariş yönetimi işlemi içermelidir. Ancak,
sağlanan sipariş yönetimi işlemleri, siparişin durumuna göre değişiklik gösterebilir.
Örneğin, bir sipariş CONFIRMED
durumunda olduğunda CUSTOMER_SERVICE
müşteri hizmetleri telefon numaranıza işaret edebilir. Sipariş durumu
IN_TRANSIT
için güncellemeler yapılırsa CUSTOMER_SERVICE
işlemi
sipariş karşılama restoranının telefon numarası
Sipariş güncellemeleri gönderiliyor
Sipariş göndermek için AsyncOrderUpdateRequestMessage
mesaj türünü kullanıyorsunuz
Uçtan Uca Siparişler hizmetinde güncelleme yapılmalıdır. Google da
AsyncOrderUpdateResponseMessage
Örneğin, bir grup insanın
geçerli ve kabul edilmiş olduğunu belirten bir e-posta aldıysanız bir
Siparişin durumunu CONFIRMED
olarak değiştirmek için AsyncOrderUpdateRequestMessage
Accepted by restaurant
etiketli.
Sipariş güncelleme mesajı ayarlama
Google'a AsyncOrderUpdateRequestMessage
gönderirken
siparişin durumu hakkında bilgi edinmek için OrderUpdate
alanını kullanın.
Aşağıdaki örneklerde şunun için örnek bir AsyncOrderUpdateRequestMessage
gösterilmektedir:
her sipariş durumu:
ONAYLANDI
Bu örnekte, kullanıcıyı bilgilendiren örnek bir sipariş güncelleme isteği gösterilmektedir Siparişin bir makbuz ve tahmini teslimat tarihiyle teyit edildiğini gerekir.
{ "isInSandbox": true, "customPushMessage": { "orderUpdate": { "actionOrderId": "sample_action_order_id", "orderState": { "state": "CONFIRMED", "label": "Provider confirmed" }, "receipt": { "userVisibleOrderId": "userVisibleId1234" }, "updateTime": "2017-07-17T12:00:00Z", "orderManagementActions": [ { "type": "CUSTOMER_SERVICE", "button": { "title": "Contact customer service", "openUrlAction": { "url": "mailto:support@example.com" } } }, { "type": "EMAIL", "button": { "title": "Email restaurant", "openUrlAction": { "url": "mailto:person@example.com" } } }, { "type": "CALL_RESTAURANT", "button": { "title": "Call restaurant", "openUrlAction": { "url": "tel:+16505554679" } } }, { "type": "CALL_DRIVER", "button": { "title": "Call driver", "openUrlAction": { "url": "tel:+16505554681" } } } ], "infoExtension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension", "estimatedFulfillmentTimeIso8601": "2017-07-17T13:00:00Z/2017-07-17T13:30:00Z" } } } }
REDDEDİLDİ
Bu örnekte, kullanıcıyı bilgilendiren örnek bir sipariş güncelleme isteği gösterilmektedir bir reddedilme nedeni ile birlikte reddedildiğinden emin olun.
{ "isInSandbox": true, "customPushMessage": { "orderUpdate": { "actionOrderId": "sample_action_order_id", "orderState": { "state": "REJECTED", "label": "Order rejected" }, "updateTime": "2017-05-10T02:30:00.000Z", "rejectionInfo": { "type": "UNKNOWN", "reason": "Sorry, the restaurant cannot take your order right now." }, "orderManagementActions": [ { "type": "CUSTOMER_SERVICE", "button": { "title": "Contact customer service", "openUrlAction": { "url": "mailto:support@example.com" } } }, { "type": "EMAIL", "button": { "title": "Email restaurant", "openUrlAction": { "url": "mailto:person@example.com" } } }, { "type": "CALL_RESTAURANT", "button": { "title": "Call restaurant", "openUrlAction": { "url": "tel:+16505554679" } } }, { "type": "CALL_DRIVER", "button": { "title": "Call driver", "openUrlAction": { "url": "tel:+16505554681" } } } ], "infoExtension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension", "foodOrderErrors": [ { "error": "NO_CAPACITY", "description": "Sorry, the restaurant cannot take your order right now." } ] } } } }
İPTAL EDİLDİ
Bu örnekte, kullanıcıyı bilgilendiren örnek bir sipariş güncelleme isteği gösterilmektedir siparişin bir iptal nedeniyle iptal edildiğini bildirmek isterim.
{ "isInSandbox": true, "customPushMessage": { "orderUpdate": { "actionOrderId": "sample_action_order_id", "orderState": { "state": "CANCELLED", "label": "Order cancelled" }, "updateTime": "2017-05-10T02:30:00.000Z", "cancellationInfo": { "reason": "Customer requested" }, "orderManagementActions": [ { "type": "CUSTOMER_SERVICE", "button": { "title": "Contact customer service", "openUrlAction": { "url": "mailto:support@example.com" } } }, { "type": "EMAIL", "button": { "title": "Email restaurant", "openUrlAction": { "url": "mailto:person@example.com" } } }, { "type": "CALL_RESTAURANT", "button": { "title": "Call restaurant", "openUrlAction": { "url": "tel:+16505554679" } } }, { "type": "CALL_DRIVER", "button": { "title": "Call driver", "openUrlAction": { "url": "tel:+16505554681" } } } ] } } }
IN_PREPARATION
Bu örnekte, kullanıcıyı bilgilendiren örnek bir sipariş güncelleme isteği gösterilmektedir yemeğin şu anda hazırlanıyor olduğunu gösterir.
{ "isInSandbox":true, "customPushMessage":{ "orderUpdate":{ "actionOrderId":"sample_action_order_id", "orderState":{ "state":"IN_PREPARATION", "label":"Order is being prepared" }, "receipt": { "userVisibleOrderId": "userVisibleId1234" }, "updateTime":"2018-04-15T11:30:00Z", "orderManagementActions": [ { "type": "CUSTOMER_SERVICE", "button": { "title": "Contact customer service", "openUrlAction": { "url": "mailto:support@example.com" } } }, { "type": "EMAIL", "button": { "title": "Email restaurant", "openUrlAction": { "url": "mailto:person@example.com" } } }, { "type": "CALL_RESTAURANT", "button": { "title": "Call restaurant", "openUrlAction": { "url": "tel:+16505554679" } } }, { "type": "CALL_DRIVER", "button": { "title": "Call driver", "openUrlAction": { "url": "tel:+16505554681" } } } ], "infoExtension":{ "@type":"type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension", "estimatedFulfillmentTimeIso8601":"PT20M" } } } }
READY_FOR_PICKUP
Bu örnekte, kullanıcıyı bilgilendiren örnek bir sipariş güncelleme isteği gösterilmektedir yemeğin alınmaya hazır olduğunu belirtmeniz gerekir.
{ "isInSandbox": true, "customPushMessage": { "orderUpdate": { "actionOrderId": "sample_action_order_id", "orderState": { "state": "READY_FOR_PICKUP", "label": "Order is ready for pickup" }, "receipt": { "userVisibleOrderId": "userVisibleId1234" }, "updateTime": "2018-04-15T12:00:00Z", "orderManagementActions": [ { "type": "CUSTOMER_SERVICE", "button": { "title": "Contact customer service", "openUrlAction": { "url": "mailto:support@example.com" } } }, { "type": "EMAIL", "button": { "title": "Email restaurant", "openUrlAction": { "url": "mailto:person@example.com" } } }, { "type": "CALL_RESTAURANT", "button": { "title": "Call restaurant", "openUrlAction": { "url": "tel:+16505554679" } } }, { "type": "CALL_DRIVER", "button": { "title": "Call driver", "openUrlAction": { "url": "tel:+16505554681" } } } ], "infoExtension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension", "estimatedFulfillmentTimeIso8601": "PT20M" } } } }
IN_TRANSIT
Bu örnekte, kullanıcıyı bilgilendiren örnek bir sipariş güncelleme isteği gösterilmektedir Siparişin, tahmini bir teslimat süresiyle birlikte yolda olduğunu doğrulayın.
{ "isInSandbox": true, "customPushMessage": { "orderUpdate": { "actionOrderId": "sample_action_order_id", "orderState": { "state": "IN_TRANSIT", "label": "Order is on the way" }, "inTransitInfo": { "updatedTime": "2017-07-17T12:00:00Z" }, "updateTime": "2017-07-17T12:00:00Z", "orderManagementActions": [ { "type": "CUSTOMER_SERVICE", "button": { "title": "Contact customer service", "openUrlAction": { "url": "mailto:support@example.com" } } }, { "type": "EMAIL", "button": { "title": "Email restaurant", "openUrlAction": { "url": "mailto:person@example.com" } } }, { "type": "CALL_RESTAURANT", "button": { "title": "Call restaurant", "openUrlAction": { "url": "tel:+16505554679" } } }, { "type": "CALL_DRIVER", "button": { "title": "Call driver", "openUrlAction": { "url": "tel:+16505554681" } } } ], "infoExtension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension", "estimatedFulfillmentTimeIso8601": "PT20M" } } } }
KARŞILANDI
Bu örnekte, kullanıcıyı bilgilendiren örnek bir sipariş güncelleme isteği gösterilmektedir siparişin alındığı veya teslim edildiğine dair bilgiyi:
{ "isInSandbox": true, "customPushMessage": { "orderUpdate": { "actionOrderId": "sample_action_order_id", "orderState": { "state": "FULFILLED", "label": "Order delivered" }, "updateTime": "2017-05-10T02:30:00.000Z", "fulfillmentInfo": { "deliveryTime": "2017-05-10T02:30:00.000Z" }, "orderManagementActions": [ { "type": "CUSTOMER_SERVICE", "button": { "title": "Contact customer service", "openUrlAction": { "url": "mailto:support@example.com" } } }, { "type": "EMAIL", "button": { "title": "Email restaurant", "openUrlAction": { "url": "mailto:person@example.com" } } }, { "type": "CALL_RESTAURANT", "button": { "title": "Call restaurant", "openUrlAction": { "url": "tel:+16505554679" } } }, { "type": "CALL_DRIVER", "button": { "title": "Call driver", "openUrlAction": { "url": "tel:+16505554681" } } } ] } } }
Farklı kullanım alanlarındaki sipariş güncelleme istekleriyle ilgili daha fazla örnek için şu makaleyi okuyun: Gelişmiş sipariş güncellemelerini uygulayın.
Yetkilendirme jetonu oluşturma ve mesajı gönderme
Sipariş güncellemelerinin uçtan uca sipariş verilebilmesi için hizmeti, iletinin Sipariş Uçtan Uca web hizmetinizden geldiğini doğrulayabilir.
Projenizde sipariş güncellemelerini uygulamak için aşağıdaki adımları izleyin:
- Aşağıdaki adımları uygulayarak bir yetkilendirme jetonu oluşturun:
- Hizmetinizdeki kimlik bilgilerini okumak için Google Kimlik Doğrulama Kitaplığı'nı kullanın hesap dosyanız.
- Aşağıdaki API kapsamını kullanarak jeton isteyin:
https://www.googleapis.com/auth/actions.fulfillment.conversation
.
- Bu jetonu şunu kullanarak doğrulanmış bir HTTP POST isteği gönderin:
şu uç nokta:
https://actions.googleapis.com/v2/conversations:send
- İsteğinizin bir parçası olarak
Content-Type
başlığınıapplication/json
olarak ayarlayın.
Aşağıdaki örneklerde, sipariş güncellemelerinin nasıl uygulanacağı gösterilmektedir:
Node.js
Bu kod, Node.js için Google kimlik doğrulama kitaplığını kullanır.
const {auth} = require('google-auth-library') const request = require('request'); // The service account client secret file downloaded from the Google Cloud Console const serviceAccountJson = require('./service-account.json') // order-update.json is a file that contains the payload const jsonBody = require('./order-update.json') /** * Get the authorization token using a service account. */ async function getAuthToken() { let client = auth.fromJSON(serviceAccountJson) client.scopes = ['https://www.googleapis.com/auth/actions.fulfillment.conversation'] const tokens = await client.authorize() return tokens.access_token; } /** * Send an order update request */ async function sendOrderUpdate() { const token = await getAuthToken() request.post({ headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${token}` }, url: 'https://actions.googleapis.com/v2/conversations:send', body: jsonBody, json: true }, (err, res, body) => { if (err) { return console.log(err); } console.log(`Response: ${JSON.stringify(res)}`) }) }
Python
Bu kod, Python için Google kimlik doğrulama kitaplığını kullanır.
from google.oauth2 import service_account from google.auth.transport.requests import AuthorizedSession import json # service-account.json is the service account client secret file downloaded from the # Google Cloud Console credentials = service_account.Credentials.from_service_account_file( 'service-account.json') scoped_credentials = credentials.with_scopes( ['https://www.googleapis.com/auth/actions.fulfillment.conversation']) authed_session = AuthorizedSession(scoped_credentials) # order-update.json is a file that contains the payload json_payload=json.load(open('order-update.json')) response = authed_session.post( 'https://actions.googleapis.com/v2/conversations:send', json=json_payload)
Java
Bu kod, Java için Google kimlik doğrulama kitaplığını kullanır.
/** * Get the authorization token using a service account. */ private static String getAuthToken() { InputStream serviceAccountFile = Example.class.getClassLoader().getResourceAsStream("service-account.json"); ServiceAccountCredentials.Builder credentialsSimpleBuilder = ServiceAccountCredentials.fromStream(serviceAccountFile).toBuilder(); credentialsSimpleBuilder.setScopes(ImmutableList.of("https://www.googleapis.com/auth/actions.fulfillment.conversation")); AccessToken accessToken = credentialsSimpleBuilder.build().refreshAccessToken(); return accessToken.getTokenValue(); } /** * Send an order update request */ public void sendOrderUpdate() { String authToken = getAuthToken(); // Execute POST request executePostRequest("https://actions.googleapis.com/v2/conversations:send", authToken, "update_order_example.json",); }
Hatasız başarılı sipariş güncellemeleri için Google bir HTTP 200 yanıtı döndürür görebilirsiniz. Bir sorun oluştuysa (örneğin, güncellemenin Google bir hata döndürür.