async process(srcContext, locale, utterance) {
    const context = srcContext || {};
    const response = await (locale
      ? this.nlpManager.process(locale, utterance, context)
      : this.nlpManager.process(utterance, undefined, context));
    if (response.score < this.threshold || response.intent === 'None') {
      response.answer = undefined;
      return response;
    }
    for (let i = 0; i < response.entities.length; i += 1) {
      const entity = response.entities[i];
      context[entity.entity] = entity.option;
    }
    if (response.slotFill) {
      context.slotFill = response.slotFill;
    } else {
      delete context.slotFill;
    }
    return response;
  }
Process an utterance using the NLP manager. This is done using a given context
as the context object.
@param {Object} srcContext Source context
@param {String} locale Locale of the utterance.
@param {Promise.String} Promise utterance Utterance to be recognized.