Промежуточный итог не рассчитывается правильно при предварительном просмотре заказа - PullRequest
0 голосов
/ 22 мая 2018

Я хочу создать чат-бота с Dialogflow и Google Assistant вместе с API транзакций Google, чтобы пользователь мог заказать некоторые элементы.На данный момент мой агент содержит следующие четыре намерения:

  • Default Welcome Intent (текстовый ответ: Здравствуйте, вы хотите купить шоколадную коробку?)
  • Default Fallback Intent
  • Int3 (обучающая фраза: Да, я хочу, выполнение: включен веб-крюк)
  • Int4 (событие: actions_intent_TRANSACTION_DECISION, выполнение: включен веб-крюк)

Я использую Dialogflow Json вместо Node.js для соединения моего агента с API транзакций.Я хочу создать корзину и заказ для пользователя, наконец, убедившись, что пользователь удовлетворяет требованиям транзакции, используя действие actions.intent.TRANSACTION_DECISION действий Google.По этой причине, следуя документам Google, при срабатывании Int3 я использую веб-крючок, который подключает мой бэкэнд Google Assistant, который отправляет обратно следующий json (для запуска actions.intent.TRANSACTION_DECISION):

  {
    "fulfillmentText": "This is your order preview:",
    "payload": {
        "google": {
            "expectUserResponse": true,
            "isSsml": false,
            "noInputPrompts": [],
            "systemIntent": {
                "data": {
                    "@type": "type.googleapis.com/google.actions.v2.TransactionDecisionValueSpec",
                    "orderOptions": {
                        "requestDeliveryAddress": true
                    },
                    "paymentOptions": {
                        "actionProvidedOptions": {
                            "displayName": "VISA **** **** **** 3235",
                            "paymentType": "PAYMENT_CARD"
                        }
                    },
                    "proposedOrder": {
                        "cart": {
                            "lineItems": [
                                {
                                    "description": "Book",
                                    "id": "1",
                                    "name": "Book",
                                    "price": {
                                        "amount": {
                                            "currencyCode": "USD",
                                            "nanos": 0,
                                            "units": 31
                                        },
                                        "type": "ACTUAL"
                                    },
                                    "quantity": 2,
                                    "subLines": [],
                                    "type": "REGULAR"
                                }
                            ],
                            "merchant": {
                                "id": "Amazon",
                                "name": "Amazon"
                            },
                            "otherItems": []
                        },
                        "id": "<UNIQUE_ORDER_ID>",
                        "otherItems": [
                            {
                                "id": "Subtotal",
                                "name": "Subtotal",
                                "price": {
                                    "amount": {
                                        "currencyCode": "USD",
                                        "nanos": 0,
                                        "units": 62
                                    },
                                    "type": "ACTUAL"
                                },
                                "type": "SUBTOTAL"
                            },
                            {
                                "id": "Delivery fees",
                                "name": "Delivery fees",
                                "price": {
                                    "amount": {
                                        "currencyCode": "USD",
                                        "nanos": 0,
                                        "units": 10
                                    },
                                    "type": "ACTUAL"
                                },
                                "type": "FEE"
                            }
                        ],
                        "totalPrice": {
                            "amount": {
                                "currencyCode": "USD",
                                "units": 72
                            },
                            "type": "ACTUAL"
                        }
                    }
                },
                "intent": "actions.intent.TRANSACTION_DECISION"
            }
        }
    }
}

Однако я получаю следующие ошибки в симуляторе Google Assistant:

MalformedResponse
expected_inputs[0].possible_intents[0].input_value_data.transaction_decision_value_spec.proposed_order: subtotal price is not sum of regular lineItems. Expected-> Sum of line item price: units: 31 nanos: 0 currency: USD Actual-> Provided total price: units: 62 nanos: 0 currency: USD.

MalformedResponse
expected_inputs[0].possible_intents[0].input_value_data.transaction_decision_value_spec.proposed_order: total price is not sum of lineItems and otherItems. Expected-> Sum of line item price: units: 42 nanos: 0 currency: USD Actual-> Provided total price: units: 72 nanos: 0 currency: USD.

Почему я получаю эту ошибку, поскольку я указал "quantity": 2 в соответствующем lineItem?

Совершенно очевидно, что промежуточный итог должен составлять units: 62, поскольку я заказал "quantity": 2 продуктов по units: 31 цене каждый ...

Предварительный просмотр окончательного заказавыглядит так (это заимствовано из примеров документов Google):

enter image description here

1 Ответ

0 голосов
/ 22 мая 2018

Ответ, по-видимому, заключается в сообщении об ошибке: API ожидает, что цена каждого элемента строки будет суммой общего количества элементов в этом элементе строки вместо количественной цены (соответствующая фраза ошибки: «Сумма цены элемента строки»).Исправленный JSON должен выглядеть примерно так:

{
  "fulfillmentText": "This is your order preview:",
  "payload": {
    "google": {
      "expectUserResponse": true,
      "isSsml": false,
      "noInputPrompts": [],
      "systemIntent": {
        "data": {
          "@type": "type.googleapis.com/google.actions.v2.TransactionDecisionValueSpec",
          "orderOptions": {
            "requestDeliveryAddress": true
          },
          "paymentOptions": {
            "actionProvidedOptions": {
              "displayName": "VISA **** **** **** 3235",
              "paymentType": "PAYMENT_CARD"
            }
          },
          "proposedOrder": {
            "cart": {
              "lineItems": [
                {
                  "description": "Book",
                  "id": "1",
                  "name": "Book",
                  "price": {
                    "amount": {
                      "currencyCode": "USD",
                      "nanos": 0,
                      "units": 62
                    },
                    "type": "ACTUAL"
                  },
                  "quantity": 2,
                  "subLines": [],
                  "type": "REGULAR"
                }
              ],
              "merchant": {
                "id": "Amazon",
                "name": "Amazon"
              },
              "otherItems": []
            },
            "id": "<UNIQUE_ORDER_ID>",
            "otherItems": [
              {
                "id": "Subtotal",
                "name": "Subtotal",
                "price": {
                  "amount": {
                    "currencyCode": "USD",
                    "nanos": 0,
                    "units": 62
                  },
                  "type": "ACTUAL"
                },
                "type": "SUBTOTAL"
              },
              {
                "id": "Delivery fees",
                "name": "Delivery fees",
                "price": {
                  "amount": {
                    "currencyCode": "USD",
                    "nanos": 0,
                    "units": 10
                  },
                  "type": "ACTUAL"
                },
                "type": "FEE"
              }
            ],
            "totalPrice": {
              "amount": {
                "currencyCode": "USD",
                "units": 72
              },
              "type": "ACTUAL"
            }
          }
        },
        "intent": "actions.intent.TRANSACTION_DECISION"
      }
    }
  }
}
...