function lookupAccountByPhone()

in functions/source/lookupDynamicsAccount/lookupDynamicsAccount.js [55:134]


function lookupAccountByPhone(callerPhoneNumber, callback) {
  callerPhoneNumber = callerPhoneNumber.replace(/^\+[0-9]/, ""); //strip +1
  console.log(
    "Starting Dynamics account lookup for number " +
      callerPhoneNumber +
      " from Dynamics instance at " +
      dynamicsHostDomain
  );

  var dynamicsLookupQuery =
    "/api/data/v8.2/accounts?$select=name&$top=1&$filter=startswith(telephone1,%27" +
    callerPhoneNumber +
    "%27)";

  var dynamicsLookupRequestHeaders = {
    Authorization: "Bearer " + accessToken,
    Accept: "application/json"
  };

  var lookupRequestParams = {
    host: dynamicsHostDomain,
    path: dynamicsLookupQuery,
    method: "GET",
    headers: dynamicsLookupRequestHeaders
  };

  https
    .get(lookupRequestParams, response => {
      var lookupResponseBody = "";

      response.on("data", dataChunk => {
        lookupResponseBody += dataChunk;
      });

      response.on("end", function() {
        if (response.statusCode == 200) {
          const parsedLookupResponseEnvelope = JSON.parse(lookupResponseBody);
          if (parsedLookupResponseEnvelope.value.length == 0) {
            console.log(
              "Account look up for " + callerPhoneNumber + " found no results"
            );
            const result = {
              accountId: "NotFound",
              accountName: "NotFound",
              accountPhoneNumber: callerPhoneNumber
            };
            callback(null, result);
          } else {
            console.log("Found Dynamics account for " + callerPhoneNumber);
            const firstAccountFound = parsedLookupResponseEnvelope.value[0];
            const result = {
              accountId: firstAccountFound.accountid,
              accountName: firstAccountFound.name,
              accountPhoneNumber: callerPhoneNumber
            };
            callback(null, result);
          }
        } else {
          var badResponseCodeMsg =
            "Could not find account. Response code " +
            response.statusCode +
            ", message: " +
            response.statusMessage;
          if (response.statusCode == 401 || response.statusCode == 403) {
            badResponseCodeMsg =
              "Dynamics returned response " +
              response.statusCode +
              ", please ensure you have provisioned the security profile for the user in accordance with the user guide. " +
              response.statusMessage;
          }
          console.error(badResponseCodeMsg);
          callback(badResponseCodeMsg);
        }
      });
    })
    .on("error", e => {
      console.error("Account lookup request failed with error: ", e);
      callback("Account lookup failed with error: " + e);
    });
}