DialogFlow V2 Webhook - espera respostas de fala imediatamente e não após solicitações assíncronas

Eu tenho um webhook DialogFlow V2 node.js.

Eu tenho uma intenção que é chamada com uma ação de webhook:

const { WebhookClient } = require('dialogflow-fulfillment');
const app = new WebhookClient({request: req, response: res});

function exampleIntent(app) {

   app.add("Speak This Out on Google Home!");   // this speaks out fine. no error. 
}

Agora, se eu tenho uma solicitação assíncrona que termina com sucesso e eu façoapp.add no bloco de sucesso como isso:

 function exampleIntent(app) {  
      myClient.someAsyncCall(function(result, err) {
          app.add("This will not be spoken out");  // no dice  :(
      }
      // app.add("but here it works... so it expects it immediately");
  }

... então o Dialog Flow não espera o retorno da fala. Eu recebo o erro no objeto Response:

  "message": "Failed to parse Dialogflow response into AppResponse, exception thrown with message: Empty speech response",

Como posso fazer com que o DialogFlow V2 aguarde a conclusão das operações assíncronas do Webhook, esperando uma resposta de fala imediatamente?

NOTA: Esse problema só começou a acontecer na V2. Na V1, o app.ask funcionou bem no final das chamadas assíncronas.

exampleIntent está sendo chamado pelo mapeador principal do aplicativo como este:

let actionMap = new Map();
actionMap.set("my V2 intent name", exampleIntent);
app.handleRequest(actionMap);

E minha solicitação assíncrona dentro de myClient.someAsyncCall está usando o Promises:

exports.someAsyncCall = function someAsyncCall(callback) {
    var apigClient = getAWSClient(); // uses aws-api-gateway-client
    apigClient.invokeApi(params, pathTemplate, method, additionalParams, body)
    .then(function(result){
        var result = result.data;
        var message = result['message'];
        console.log('SUCCESS: ' + message);
        callback(message, null);  // this succeeds and calls back fine. 
    }).catch( function(error){
        console.log('ERROR: ' + error);
        callback(error, null);
    });
};

questionAnswers(1)

yourAnswerToTheQuestion