Si estás al día de las actualizaciones que van ocurriendo en la plataforma Microsoft Bot Framework, verás que cada vez se mejoran más y más cada una de las funcionalidades que se ponen a disposición del desarrollador. Una de estas mejoras es la comprobación de manera automática del Prompt que estás usando. Es decir, si utilizas Prompts.text el propio SDK validará que se ha introducido un texto, si usas el Prompts.attachment que has recibido un archivo y así con cada uno de ellos. Sin embargo, esto puede ocasionar que la recuperación de las coordenadas deje de funcionar al no coincidir con ninguno de los tipos anteriores. Es por ello que en este post te voy a mostrar cómo crear tus propios Prompts personalizados con el fin de poder recuperar del contexto otro tipo de valores que llegan de los diferentes canales.
Lo primero que necesitas es crear la lógica del Prompt donde podrás definir qué propiedades del contexto quieres recuperar, en este caso las coordenadas, y cuándo se han obtenido de forma satisfactoria o no:
var prompt = new builder.Prompt({ defaultRetryPrompt: 'I\'m sorry, I do not recognize those coordinates.' }) .onRecognize(function (context, callback) { var entities = context.message.entities[0] || {}; if (entities.hasOwnProperty('geo') && entities.geo.hasOwnProperty('latitude')) { callback(null, 1.0, entities); } else { callback(null, 0.0); } });
El siguiente paso es añadir dicho Prompt como diálogo de tu bot.
bot.dialog('coordinatesPrompt', prompt);
Por último, añade a botbuilder.Prompts una función que te permita invocar el diálogo anterior:
builder.Prompts.coordinates = function (session, prompt, options) { var args = options || {}; args.prompt = prompt || options.prompt; session.beginDialog('coordinatesPrompt', args); }
Una vez hechos estos pasos ya podrás utilizar este nuevo Prompt desde cualquier parte de tu bot. Para ello, basta con invocarlo de la misma forma que lo harías con un Prompt de los que vienen por defecto:
bot.dialog('/', [ function (session) { builder.Prompts.coordinates(session, "Please share your coordinates"); }, function (session, results) { console.log(results); session.endDialog('Your coordinates: %s,%s', results.response.geo.longitude, results.response.geo.latitude); } ]);
¡Saludos!