Mostrando entradas con la etiqueta nueva api whatsapp business. Mostrar todas las entradas
Mostrando entradas con la etiqueta nueva api whatsapp business. Mostrar todas las entradas

martes, 2 de agosto de 2022

Whatsapp API Business (Parte 4) ChatBot Toma Pedido

  Hola a continuación les dejo material para la cuarta parte de los tutoriales API whatsapp liberado en el mes de Mayo 2022 e integrarlo con Google Sheet les va permitir arnar un chatbots operativo 100 %

Video Implementación


Página Meta facebook


En la siguiente pagina pueden configurar sus plantillas y mensajes del API Whatsapp Business

https://developers.facebook.com/apps/?show_reminder=true


Y el token lo obtienen desde :



Configuracion webhook


Paso 1 : Configurar el webhook con la URL AppScript

Paso 2 : Aceptar las notificaciones del tipo mensaje:

Plantillas meta creadas


https://business.facebook.com/wa/manage/message-templates


Para el BOT se han creado las siguientes plantillas


El detalle de cada plantilla se explica en el Video


Plantillas Google Sheet

https://docs.google.com/spreadsheets/d/1B-C8PRTe4voglUs_jPEAoqzQRhVMpc9cDQGWePLvud8/edit?usp=sharing


Código AppScript 


function notificarmeta(plantilla, salida, numero) {

var excel = SpreadsheetApp.getActiveSpreadsheet(); var sheet_configuracion = excel.getSheetByName("Configuracion"); try { var token = sheet_configuracion.getRange(1, 2).getValue(); var api = sheet_configuracion.getRange(2, 2).getValue(); var payload = JSON.parse(JSON.stringify({ "messaging_product": "whatsapp", "to": numero, "type": "template", "template": { "name": plantilla, "language": { "code": "es" }, "components": [] } })); var texto = []; if (salida) { texto = salida.split(":::"); } // SE AGREGA LOS PARAMETROS DE TEXTO if (texto.length > 0) { payload.template.components.push({ "type": "body", "parameters": [] }); for (var il = 0; il < texto.length; il++) { payload.template.components[0].parameters.push({ "type": "text", "text": texto[il] }); } } var options = { 'headers': { "Content-Type": "application/json", "Authorization": token }, 'method': "POST", 'payload': JSON.stringify(payload) }; var response = UrlFetchApp.fetch(api, options); var json = JSON.parse(response.getContentText()); } catch (e) { } } function enviar(numero_enviar, mensaje_buscar) { var jo = {}; /* se recupera la session del cached en caso exista*/ var cache = CacheService.getScriptCache(); var conversaciones = []; if (cache.get("conversaciones") != null) { conversaciones = JSON.parse(cache.get("conversaciones")); } // RECORREMOS LAS CONVERCACION PARA CONOCER EL EVENTO var excel = SpreadsheetApp.getActiveSpreadsheet(); var sheet_configuracion = excel.getSheetByName("Configuracion"); var sheet = excel.getSheetByName("Conversacion"); var rows = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn()).getValues(); var evento = rows.find((item) => item[1].split(";").includes(mensaje_buscar)); var evento_error = rows.find((item) => item[0] === "bot_pedido_error"); if (evento === undefined) { var filtroconversacion = conversaciones.filter((item) => item.numero == numero_enviar); evento = evento_error; if (filtroconversacion.length > 0) { var evento_retorno = filtroconversacion[filtroconversacion.length - 1].retornar; var evento_retornar = rows.find((item) => evento_retorno != "" && item[0] === evento_retorno); if (evento_retornar !== undefined) { evento = evento_retornar; } } } var conversacion_ingresado = { numero: numero_enviar, mensaje_entrada: mensaje_buscar, evento: evento[0], retornar: evento[3], mensaje_salida: evento[2] }; if (conversacion_ingresado.evento == "bot_pedido_consultar_fin") { // SE RECUPERA EL DETALLE DE LA SOLICITUD conversacion_ingresado.mensaje_salida = "\\nSolicitud:" + conversacion_ingresado.mensaje_entrada + " No existe \\n" try { var sheet_solicitud = excel.getSheetByName("Solicitudes"); var rows_solicitud = sheet_solicitud.getRange(2, 1, sheet_solicitud.getLastRow() - 1, sheet_solicitud.getLastColumn()).getValues(); var mensaje_retornar = rows_solicitud.find((item) => (item[0] + "") === ("" + conversacion_ingresado.mensaje_entrada)); if (mensaje_retornar !== undefined) { conversacion_ingresado.mensaje_salida = "\\nSolicitud:" + conversacion_ingresado.mensaje_entrada + "\\nCliente:" + mensaje_retornar[5] + "\\nDireccion:" + mensaje_retornar[6] + "\\nPedido:\\n" + mensaje_retornar[4]; } } catch (e) { } } else if (conversacion_ingresado.evento == "bot_pedido_solicitar") { // SE RECUPERA EL DETALLE DE LA SOLICITUD conversacion_ingresado.mensaje_salida = "\\nError de productos \\n" try { var sheet_producto = excel.getSheetByName("Producto"); var rows_producto = sheet_producto.getRange(2, 1, sheet_producto.getLastRow() - 1, sheet_producto.getLastColumn()).getValues(); var texto = "\\n"; for (var i = 0; i < rows_producto.length; i++) { texto += rows_producto[i][0] + ") " + rows_producto[i][1] + " Precio : " + rows_producto[i][2] + " " + rows_producto[i][3] + "\\n"; } conversacion_ingresado.mensaje_salida = texto; } catch (e) { } } else if (conversacion_ingresado.evento == "bot_pedido_terminar_pedido") { // SE RECUPERA EL DETALLE DE LA SOLICITUD conversacion_ingresado.mensaje_salida = "\\nError detalle pedido productos \\n"; var sheet_producto = excel.getSheetByName("Producto"); var rows_producto = sheet_producto.getRange(2, 1, sheet_producto.getLastRow() - 1, sheet_producto.getLastColumn()).getValues(); try { var result_numero = conversaciones.filter(item => item.numero == numero_enviar); var detalle_pedido = ""; var sumatoria = 0; var producto_encontrado = {}; for (var i = 0; i < result_numero.length; i++) { if (result_numero[i].evento == "bot_pedido_producto") { producto_encontrado = rows_producto.find((item) => (item[0] + "") === ("" + result_numero[i].mensaje_entrada)); if (producto_encontrado !== undefined) { detalle_pedido += " producto : " + producto_encontrado[1]; } } if (result_numero[i].evento == "bot_pedido_continuar_pedido") { var subtotal = 0; if (producto_encontrado !== undefined) { subtotal = parseFloat(parseInt(result_numero[i].mensaje_entrada) * parseFloat(producto_encontrado[2])); } sumatoria += subtotal; detalle_pedido += " Subtotal : " + result_numero[i].mensaje_entrada + " x " + producto_encontrado[2] + " = " + subtotal + "\\n"; } } detalle_pedido += " TOTAL :" + sumatoria + "\\n"; conversacion_ingresado.mensaje_salida = detalle_pedido; } catch (e) { } } else if (conversacion_ingresado.evento == "bot_pedido_terminar_pedido_fin") { var fecha = Utilities.formatDate(new Date(), "GMT", "yyyy-MM-dd HH:mm:ss"); var excel = SpreadsheetApp.getActiveSpreadsheet(); var sheet_solicitud = excel.getSheetByName("Solicitudes"); var conversaciones_final = conversaciones.filter((item) => item.numero == conversacion_ingresado.numero); conversacion_ingresado.mensaje_salida = "Su numero de pedido es #" + (sheet_solicitud.getLastRow() + 1); conversaciones_final.push(conversacion_ingresado); var cliente = conversaciones_final.find((item) => item.evento == "bot_pedido_terminar_pedido_direccion"); if (cliente == undefined) { cliente = "Cliente"; } var direccion = conversaciones_final.find((item) => item.evento == "bot_pedido_terminar_pedido_fin"); if (direccion == undefined) { direccion = "Direccion"; } var pedido = conversaciones_final.find((item) => item.evento == "bot_pedido_terminar_pedido"); if (pedido == undefined) { pedido = "pedido"; } sheet_solicitud.appendRow([sheet_solicitud.getLastRow() + 1, fecha, conversacion_ingresado.numero, "Pendiente", pedido.mensaje_salida, cliente.mensaje_entrada, direccion.mensaje_entrada, JSON.stringify(conversaciones_final)]); } // SE PONE PUSH conversaciones.push(conversacion_ingresado); // SE ENVIA A META notificarmeta(conversacion_ingresado.evento, conversacion_ingresado.mensaje_salida, conversacion_ingresado.numero); // FIN DE ENVIO A META if (evento[0].includes("_inicio")) { var result_numero = conversaciones.filter(item => item.numero !== numero_enviar); if (result_numero === undefined || result_numero.length == 0) { conversaciones = []; } else { conversaciones = result_numero; } conversaciones.push(conversacion_ingresado); } cache.put('conversaciones', JSON.stringify(conversaciones), 120); jo.status = '0'; jo.message = ' Se grabo el registro'; jo.conversaciones = conversaciones; return JSON.stringify(jo); } function doPost(e) { var operacion = JSON.parse(e.postData.contents); var numero = operacion.entry[0].changes[0].value.messages[0].from; var mensaje = ""; if (operacion.entry[0].changes[0].value.messages[0].type == "text") { mensaje = operacion.entry[0].changes[0].value.messages[0].text.body; } else if (operacion.entry[0].changes[0].value.messages[0].type == "button") { mensaje = operacion.entry[0].changes[0].value.messages[0].button.text; } /* var excel = SpreadsheetApp.getActiveSpreadsheet(); var sheet_solicitud = excel.getSheetByName("Informacion"); sheet_solicitud.appendRow([numero, mensaje, new Date(), JSON.stringify(operacion)]);*/ var respuesta = enviar(numero, mensaje); return ContentService.createTextOutput(JSON.stringify(operacion)).setMimeType(ContentService.MimeType.JSON); } function doGet(e) { var cadena = e.parameter["hub.challenge"]; var excel = SpreadsheetApp.getActiveSpreadsheet(); var sheet_configuracion = excel.getSheetByName("Configuracion"); sheet_configuracion.getRange(7, 2).setValue(cadena); sheet_configuracion.getRange(8, 2).setValue(JSON.stringify(e)); var respuesta = { "status": "OK" }; return ContentService.createTextOutput(cadena).setMimeType(ContentService.MimeType.CSV); }


ASESORIA PERSONALIZADA :

En caso necesites alguna asesoría personalizada agéndame un espacio.

https://reservarasesoriaanlusoft.blogspot.com/


martes, 31 de mayo de 2022

Whatsapp API Business (Parte 3) BOT Auto Responder

 Hola a continuación les dejo material para la tercera parte de los tutoriales API whatsapp liberado en el mes de Mayo 2022 e integrarlo con Google Sheet les va permitir autoresponder a botones de solicitud de información

Video Implementación



Página Meta facebook


En la siguiente pagina pueden configurar sus plantillas y mensajes del API Whatsapp Business

https://developers.facebook.com/apps/?show_reminder=true


Y el token lo obtienen desde :



Plantillas

https://business.facebook.com/wa/manage/message-templates


Configuracion webhook


Paso 1 : Configurar el webhook con la URL AppScript

Paso 2 : Aceptar las notificaciones del tipo mensaje:


Página Excel Plantilla


https://docs.google.com/spreadsheets/d/13leXNvtIBGGcKlUKaITGFn980wXdnSeH58TSr3xSads/edit?usp=sharing


Código AppScript 



function onOpen() {

createMenus(); } function createMenus() { var menu = SpreadsheetApp.getUi().createMenu("Whatsapp") menu.addItem('Notificar Whatsapp', 'enviarwhatsapp'); menu.addToUi(); } function enviarwhatsapp() { var response = "No" try { var response = Browser.msgBox('Seguro que quiere enviar msj ahora ?', Browser.Buttons.YES_NO); } catch (e) { Browser.msgBox('La acción no se ha realizado', Browser.Buttons.OK); } if (response == "yes") { enviar("Mensajes", "", ""); console.log("Funcion fin programar : la fecha y hora: " + new Date()); Browser.msgBox('La acción ha sido realizada', Browser.Buttons.OK); } } function enviar(hoja, numero_enviar, mensaje_buscar) { var excel = SpreadsheetApp.getActiveSpreadsheet(); var sheet_configuracion = excel.getSheetByName("Configuracion"); try { var token = sheet_configuracion.getRange(1, 2).getValue(); var api = sheet_configuracion.getRange(2, 2).getValue(); if (excel.getSheetByName(hoja)) { var sheet = excel.getSheetByName(hoja); var rows = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn()).getValues(); for (var i = 0, l = rows.length; i < l; i++) { var numero = ""; if (numero_enviar != "") { if (mensaje_buscar.toUpperCase() == rows[i][0].toUpperCase()) { numero = numero_enviar; } else { continue; } } else { numero = rows[i][0]; } var plantilla = rows[i][4]; var payload = JSON.parse(JSON.stringify({ "messaging_product": "whatsapp", "to": numero, "type": "template", "template": { "name": plantilla, "language": { "code": "es" }, "components": [] } })); var texto = []; if (rows[i][1]) { texto = rows[i][1].split(":::"); } // SE AGREGA LOS PARAMETROS DE TEXTO if (texto.length > 0) { payload.template.components.push({ "type": "body", "parameters": [] }); for (var il = 0; il < texto.length; il++) { payload.template.components[0].parameters.push({ "type": "text", "text": texto[il] }); } } // SE AGREGA IMAGEN AL HEADER var imagen = rows[i][3]; if (imagen) { payload.template.components.push({ "type": "header", "parameters": [{ "type": "image", "image": { "link": imagen } }] }); } // SE AGREGA DOCUMENTO AL HEADER var documento = rows[i][2]; if (documento) { var nombre_archivo = (documento).substring((documento).lastIndexOf("/") + "/".length, (documento).length); payload.template.components.push({ "type": "header", "parameters": [{ "type": "document", "document": { "link": documento, "filename": nombre_archivo } }] }); } var options = { 'headers': { "Content-Type": "application/json", "Authorization": token }, 'method': "POST", 'payload': JSON.stringify(payload) }; var response = UrlFetchApp.fetch(api, options); var json = JSON.parse(response.getContentText()); Utilities.sleep(2000); if (numero_enviar == "") { if (json.error) { sheet.getRange(2 + i, 6).setValue("ERROR"); } else { sheet.getRange(2 + i, 6).setValue("EXITO"); } } else { break; } } } } catch (e) { sheet_configuracion.getRange(10, 2).setValue(e); } } function doPost(e) { var operacion = JSON.parse(e.postData.contents); var excel = SpreadsheetApp.getActiveSpreadsheet(); var sheet_solicitud = excel.getSheetByName("Solicitudes"); var numero = operacion.entry[0].changes[0].value.messages[0].from; var mensaje = operacion.entry[0].changes[0].value.messages[0].button.text; sheet_solicitud.appendRow([numero, mensaje, new Date(),JSON.stringify(operacion)]); enviar("Conversacion", numero, mensaje); var respuesta = {}; return ContentService.createTextOutput(JSON.stringify(operacion)).setMimeType(ContentService.MimeType.JSON); } function doGet(e) { // var callback = e.parameter.callback; var excel = SpreadsheetApp.getActiveSpreadsheet(); var sheet_configuracion = excel.getSheetByName("Configuracion"); var cadena = e.parameter["hub.challenge"]; sheet_configuracion.getRange(7, 2).setValue(cadena); sheet_configuracion.getRange(8, 2).setValue(JSON.stringify(e)); var respuesta = { "status": "OK" }; return ContentService.createTextOutput(cadena).setMimeType(ContentService.MimeType.CSV); }



ASESORIA PERSONALIZADA :

En caso necesites alguna asesoría personalizada agéndame un espacio.

https://reservarasesoriaanlusoft.blogspot.com/


lunes, 30 de mayo de 2022

Whatsapp API Business (Parte 2) Imagen, Documento,Botones

 Hola a continuación les dejo material para la segunda parte de los tutoriales API whatsapp liberado en el mes de Mayo 2022 e integrarlo con Google Sheet les va permitir el envio de botones , imagenes, documentos de forma masiva

Video Implementación




Página Meta facebook


En la siguiente pagina pueden configurar sus plantillas y mensajes del API Whatsapp Business

https://developers.facebook.com/apps/?show_reminder=true


Y el token lo obtienen desde :



Plantillas

https://business.facebook.com/wa/manage/message-templates



Página Excel Plantilla


https://docs.google.com/spreadsheets/d/1HSsPHXH3-SNjl6Cth9jyRe_vG505jONCOh2Go-4RIXU/edit?usp=sharing



Código AppScript 


function onOpen() { createMenus(); } function createMenus() { var menu = SpreadsheetApp.getUi().createMenu("Whatsapp") menu.addItem('Notificar Whatsapp', 'enviarwhatsapp'); menu.addToUi(); } function enviarwhatsapp() { var response = "No" try { var response = Browser.msgBox('Seguro que quiere enviar msj ahora ?', Browser.Buttons.YES_NO); } catch (e) { Browser.msgBox('La acción no se ha realizado', Browser.Buttons.OK); } if (response == "yes") { enviar(); console.log("Funcion fin programar : la fecha y hora: " + new Date()); Browser.msgBox('La acción ha sido realizada', Browser.Buttons.OK); } } function enviar() { var excel = SpreadsheetApp.getActiveSpreadsheet(); var sheet_configuracion = excel.getSheetByName("Configuracion"); try { var token = sheet_configuracion.getRange(1, 2).getValue(); var api = sheet_configuracion.getRange(2, 2).getValue(); if (excel.getSheetByName("Mensaje")) { var sheet = excel.getSheetByName("Mensaje"); var rows = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn()).getValues(); for (var i = 0, l = rows.length; i < l; i++) { var numero = rows[i][0]; var plantilla = rows[i][4]; var payload = JSON.parse(JSON.stringify({ "messaging_product": "whatsapp", "to": numero, "type": "template", "template": { "name": plantilla, "language": { "code": "es" }, "components": [] } })); var texto = []; if (rows[i][1]) { texto = rows[i][1].split(":::"); } // SE AGREGA LOS PARAMETROS DE TEXTO if (texto.length > 0) { payload.template.components.push({ "type": "body", "parameters": [] }); for (var il = 0; il < texto.length; il++) { payload.template.components[0].parameters.push({ "type": "text", "text": texto[il] }); } } // SE AGREGA IMAGEN AL HEADER var imagen = rows[i][3]; if (imagen) { payload.template.components.push({ "type": "header", "parameters": [{ "type": "image", "image": { "link": imagen } }] }); } // SE AGREGA DOCUMENTO AL HEADER var documento = rows[i][2]; if (documento) { var nombre_archivo = (documento).substring((documento).lastIndexOf("/") + "/".length, (documento).length); payload.template.components.push({ "type": "header", "parameters": [{ "type": "document", "document": { "link": documento, "filename": nombre_archivo } }] }); } var options = { 'headers': { "Content-Type": "application/json", "Authorization": token }, 'method': "POST", 'payload': JSON.stringify(payload) }; var response = UrlFetchApp.fetch(api, options); var json = JSON.parse(response.getContentText()); Utilities.sleep(2000); if (json.error) { sheet.getRange(2 + i, 6).setValue("ERROR"); } else { sheet.getRange(2 + i, 6).setValue("EXITO"); } } } } catch (e) { sheet_configuracion.getRange(10, 2).setValue(e); } }



ASESORIA PERSONALIZADA :

En caso necesites alguna asesoría personalizada agéndame un espacio.

https://reservarasesoriaanlusoft.blogspot.com/

martes, 24 de mayo de 2022

Whatsapp API Business (Parte 1)

 

Hola a continuación les dejo material para que puedan implementar su API whatsapp liberado en el mes de Mayo 2022 e integrarlo con Google Sheet.

Video Implementación



Página Meta facebook


En la siguiente pagina pueden configurar sus plantillas y mensajes del API Whatsapp Business

https://developers.facebook.com/apps/?show_reminder=true


Y el token lo obtienen desde :




Página Excel Plantilla


https://docs.google.com/spreadsheets/d/1EtacZpXD6mFFYx8tywMi7SMJ2mVd3E_JAyjQVO2mvPA/edit?usp=sharing


Código AppScript 


function onOpen() {

    createMenus();

}


function createMenus() {

    var menu = SpreadsheetApp.getUi().createMenu("Whatsapp")

    menu.addItem('Notificar Whatsapp', 'enviarwhatsapp');

    menu.addToUi();

}

function enviarwhatsapp() {


    var response = "No"

    try {

        var response = Browser.msgBox('Seguro que quiere enviar msj ahora ?', Browser.Buttons.YES_NO);

    } catch (e) {

        Browser.msgBox('La acción no se ha realizado', Browser.Buttons.OK);

    }

    if (response == "yes") {

        enviar();

        console.log("Funcion fin programar : la fecha y hora: " + new Date());

        Browser.msgBox('La acción ha sido realizada', Browser.Buttons.OK);

    }

}


function enviar() {


    var excel = SpreadsheetApp.getActiveSpreadsheet();

    var sheet_configuracion = excel.getSheetByName("Configuracion");

    var plantilla = sheet_configuracion.getRange(1, 2).getValue();

    var token = sheet_configuracion.getRange(2, 2).getValue();

    var api = sheet_configuracion.getRange(3, 2).getValue();


  if (excel.getSheetByName("Mensaje")) {

        var sheet = excel.getSheetByName("Mensaje");

        var rows = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn()).getValues();

        for (var i = 0, l = rows.length; i < l; i++) {

            var numero = rows[i][0];

            var nombre = rows[i][1];

            var payload = {

                "messaging_product": "whatsapp",

                "to": numero,

                "type": "template",

                "template": {

                    "name": plantilla,

                    "language": {

                        "code": "en_US"

                    },

                    "components": [{

                        "type": "body",

                        "parameters": [

                            {

                                "type": "text",

                                "text": nombre

                            }

                        ]

                    }]

                }

            }


            var options =

            {

              'headers': { "Content-Type": "application/json","Authorization": token},

                'method': "POST",

                'payload': JSON.stringify(payload)

            };


            try {

                var response = UrlFetchApp.fetch(api, options);

                var json = JSON.parse(response.getContentText());

            } catch (e) {


            }


        }

    }

}


ASESORIA PERSONALIZADA :

En caso necesites alguna asesoría personalizada agéndame un espacio.

https://reservarasesoriaanlusoft.blogspot.com/


🚀 Crea tu Propio Sistema de Inventario y Úsalo desde tu Celular 📱

 📱📦 Crea tu Sistema de Inventario y úsalo desde tu celular. En este video muestro cómo desarrollar un sistema de inventario con escáner us...