async function validateSearchHotel()

in lex-validate-lambda/searchHotel/CodeHookHandler.js [168:323]


async function validateSearchHotel(
  request,
  customerName,
  customerPhoneNumber,
  city
) {
  console.log("validateSearchHotel : customerName - ", customerName);
  console.log("validateSearchHotel : city -", city);
  console.log(
    "validateSearchHotel : customerPhoneNumber -",
    customerPhoneNumber
  );
  //console.log("response=", response);
  let outputSessionAttributes = request.sessionAttributes || {};
  let sessionAttributes = request.sessionAttributes || {};
  try {
    if (request.sessionState.intent.confirmationState === "Confirmed") {
      console.log("네");

      return delegateResponse(
        request.sessionState.activeContexts,
        request.sessionState.intent,
        sessionAttributes
      );
    } else if (request.sessionState.intent.confirmationState === "Denied") {
      console.log("아니오");

      return elicitSlotResponse(
        request.interpretations[0].intent.name,
        request.interpretations[0].intent.slots,
        "City",
        i18n.t("elicitSlotofCityResponse"),
        // "도시명을 다시 말씀해주세요.",
        outputSessionAttributes
      );
    }
    if (customerName !== null) {
      const response = await graphqlClient.query({
        query: ByCustomerName,
        variables: {
          customerName: customerName.value.interpretedValue.replace(
            /(\s*)/g,
            ""
          ),
        },
      });

      console.log(
        "response.data.ByCustomerName.items=",
        response.data.ByCustomerName.items
      );

      let customerNameItems = response.data.ByCustomerName.items;

      if (customerNameItems && customerNameItems.length > 1) {
        console.log("size is over than 1");

        for (let i = 0; i < customerNameItems.length; ++i) {
          if (customerPhoneNumber === null) {
            return elicitSlotResponse(
              request.interpretations[0].intent.name,
              request.interpretations[0].intent.slots,
              "CustomerPhoneNumber",
              i18n.t("elicitSlotofPhoneNumberResponse", {
                customerName: customerName.value.interpretedValue,
              }),
              outputSessionAttributes
            );
          } else if (
            customerNameItems[i].customerPhoneNumber ===
            customerPhoneNumber.value.interpretedValue.replace(/(\s*)/g, "")
          ) {
            if (city !== null) {
              return confirmIntentResponse(
                sessionAttributes,
                request.interpretations[0].intent.name,
                request.interpretations[0].intent.slots,
                i18n.t("confirmIntentResponse", {
                  city: city.value.interpretedValue,
                })
              );
            } else {
              return delegateResponse(
                request.sessionState.activeContexts,
                request.sessionState.intent,
                sessionAttributes
              );
            }
          }
        }
        return elicitSlotResponse(
          request.interpretations[0].intent.name,
          request.interpretations[0].intent.slots,
          "CustomerPhoneNumber",
          i18n.t("elicitSlotofPhoneNumber2Response", {
            customerName: customerName.value.interpretedValue,
            customerPhoneNumber: customerPhoneNumber.value.interpretedValue,
          }),
          // `${customerName.value.interpretedValue.replace(
          //   /(\s*)/g,
          //   ""
          // )}님의 ${customerPhoneNumber.value.interpretedValue.replace(
          //   /(\s*)/g,
          //   ""
          // )} 전화번호로 예약된 내용이 없습니다. 전화번호를 다시 말씀해주세요.`,
          outputSessionAttributes
        );
      } else {
        if (
          response.data.ByCustomerName.items[0] &&
          response.data.ByCustomerName.items[0].customerName ===
            customerName.value.interpretedValue.replace(/(\s*)/g, "")
        ) {
          if (city !== null) {
            return confirmIntentResponse(
              sessionAttributes,
              request.interpretations[0].intent.name,
              request.interpretations[0].intent.slots,
              i18n.t("confirmIntentResponse", {
                city: city.value.interpretedValue,
              })
              //`${city.value.interpretedValue} 시에 예약하신게 맞습니까?`
            );
          } else {
            return delegateResponse(
              request.sessionState.activeContexts,
              request.sessionState.intent,
              sessionAttributes
            );
          }
        } else {
          return elicitSlotResponse(
            request.interpretations[0].intent.name,
            request.interpretations[0].intent.slots,
            "CustomerName",
            i18n.t("elicitSlotofNameResponse", {
              customerName: customerName.value.interpretedValue,
            }),
            //  `${customerName.value.interpretedValue} 이름으로 예약이 없습니다. 이름을 다시 말씀해주세요.`,
            outputSessionAttributes
          );
        }
      }
    } else {
      return delegateResponse(
        request.sessionState.activeContexts,
        request.sessionState.intent,
        sessionAttributes
      );
    }
  } catch (err) {
    console.log("err=", err);
  } finally {
    //  console.log("finally");
  }
}