Configurar Actions
Después de crear el bot, necesitarás crear actions y configurar las respuestas de las actions según sea necesario. Generalmente puedes elegir configurar la respuesta de una action para que se base en una lógica de negocio o en una respuesta estática directa sin involucrar ninguna operación. En este tutorial, la respuesta de todas las actions se configurará basándose en la ejecución de una lógica de negocio.
Crearemos el siguiente conjunto de actions para el bot de ecommerce, para que los usuarios puedan interactuar directamente con el bot y realizar acciones con facilidad.
- Listar los productos en la tienda de ecommerce
- Realizar un nuevo pedido
- Ver los detalles de un pedido
- Cambiar la dirección de entrega
- Reprogramar el pedido a una fecha posterior
Para configurar una action basada en las necesidades específicas de tu aplicación, debes definir las sample sentences y params apropiados para ella. En esta sección, discutiremos en detalle las sample sentences y params que se deben configurar para las actions mencionadas anteriormente para tu bot de ecommerce.
Después de crear un bot de ConvoKraft y elegir la plataforma de desarrollo apropiada para construir la lógica de negocio, se mostrará la página de detalles del bot como se muestra en la captura de pantalla a continuación.
Sigue los pasos listados a continuación para crear y configurar actions para el bot de ecommerce:
-
Haz clic en Create Action después de abrir el bot para agregar una nueva action.

-
Crearemos la primera action para nuestro bot de ecommerce para listar los artículos disponibles en la tienda. En la ventana emergente que se abre, proporciona el nombre de la action como “List the items available in Store”. Selecciona la respuesta como Based on a business logic y luego haz clic en Next.

-
Configura las sample sentences aplicables. De forma conversacional, el usuario podría activar esta action de muchas maneras, como “list the items available”, “what are the products available in the store?”. Puedes configurar oraciones similares como las sample sentences para la action y hacer clic en Next.

-
No configuraremos ningún param para esta action. Por lo tanto, puedes omitir este paso y proceder a hacer clic en Save.

-
Después de configurar las sample sentences y params de una action, se mostrará la página de detalles de la Action.

Since we have chosen to build the business logic of the ConvoKraft bot using Deluge, the Execution function will be enabled by default.
Haz clic en Edit Function y el Editor de Deluge de ConvoKraft se abrirá automáticamente.
- Para codificar la lógica de negocio, puedes copiar y pegar el código mencionado a continuación para esta función en el editor y hacer clic en Save script.
result = Map();
Accesstoken = invokeurl
[
url :"https://test-773793963.development.catalystserverless.com/server/TokenGenerate/execute"
type :GET
];
info Accesstoken.getJSON("output");
accesstoken = "Zoho-Oauthtoken " + Accesstoken.getJSON("output");
header_data = Map();
header_data.put("Content-Type","application/json");
header_data.put("Authorization",accesstoken);
CRMresponse = invokeurl
[
url :"https://www.zohoapis.com/crm/v2/EcomProducts?fields=Name,Product_image_url,Price,Inventory_Count,Product_image"
type :GET
headers:header_data
];
info CRMresponse;
cardlist = List();
productNote = Map();
productNote.put("type","note");
productNote.put("content","List of items available are listed as follows ");
cardlist.add(productNote);
for each record in CRMresponse.getJSON("data")
{
info record;
name = record.getJSON("Name");
price = record.getJSON("Price");
product_id = record.getJSON("id");
image = record.getJSON("Product_image_url");
inventory = record.getJSON("Inventory_Count");
listItem = Map();
listItem.put("type","list");
listItem.put("format","bullet");
listElements = List();
elem1 = {"label":"Name : " + name};
elem2 = {"label":"Total Price : $ " + price};
elem3 = {"label":"Product ID : " + product_id};
elem4 = {"label":"Stock : " + inventory};
listElements.add(elem1);
listElements.add(elem2);
listElements.add(elem3);
listElements.add(elem4);
listItem.put("elements",listElements);
//info listItem;
// definiendo la tarjeta 'image'
// definiendo la tarjeta 'note'
productPic = Map();
productPic.put("type","image");
productPic.put("content",record.getJSON("Product_image_url"));
cardlist.add(productPic);
cardlist.add(listItem);
}
info cardlist;
result.put("card",cardlist);
result.put("message","List of Objects in response");
return result;
- Haz clic en Test this action en la esquina inferior derecha de la página para probar las configuraciones realizadas en la action actual.
Aquí, probar una action simplemente significa interactuar con el bot y hacer preguntas relacionadas con las configuraciones realizadas para la action en particular.
Por ejemplo, ingresa “Can you list the items with their stock” en la ventana de chat. El bot comprende la intención del mensaje e intenta encontrar una coincidencia con las sample sentences definidas y ejecuta la lógica de negocio para proporcionar la respuesta.
- Después de probar la action, continúa haciendo clic en DONE.
De manera similar, crearemos las actions restantes del bot de ecommerce. Los pasos mencionados anteriormente se aplicarán a todas las actions, además es posible que necesites crear params y configurar la lógica en una context handler function.
Place an Order
-
Crea una nueva action desde la página de detalles del bot para responder basándose en la lógica de negocio como se discutió en el paso anterior, y nómbrala como “Place an order”. Las sample sentences para esta action se pueden definir de la siguiente manera:
-
“I want to place an order”
-
“I would like to place an order of the product id :5804508000000460006 to be delivered on 10-Jul-2023”
-
Haz clic en Next después de configurar las oraciones.
- Haz clic en New Param y haz clic en String. Proporciona el nombre del param como “productid” y agrega un mensaje de solicitud consultando la tabla a continuación. Para obtener más información sobre los atributos de cada tipo de param en detalle, consulta esta página.

Crearemos los siguientes params para esta action:
| Param Type | Name | Prompt message | Prompt message for validation failure |
|---|---|---|---|
| String | productid | Please enter the Product ID | The entered ProductID is invalid. Please check and retry. |
| cxemail | Please enter your Email ID | The entered email ID is invalid. Please check and retry. | |
| Date | cxdate | Please enter the date on which you expect the delivery | The entered date is invalid. Please check and retry. |
| String | cxaddr | Please enter the address where you want the order to be delivered | The entered address is invalid. Please check and retry. |
De manera similar, crea los otros tres params, “cxemail”, “cxdate” y “cxaddr” con el tipo de param y mensajes de solicitud como se mencionan en la tabla anterior.
-
Asocia los params con el texto correspondiente en las sample sentences, para instruir al bot a solicitar las entradas del usuario consecutivamente en la conversación. Para esto, pasa el cursor sobre el texto en la sample sentence y elige el param correspondiente para asociarlos. Aquí, asociaremos “cxemail”, “productid” y “cxdate” con sus valores de ejemplo correspondientes en las sample sentences como se muestra en la captura de pantalla a continuación.

-
Después de configurar las sample sentences y params para la action, haz clic en Save.
-
Ahora puedes proceder a codificar la lógica de negocio en la execution function, similar a lo que hicimos para la action anterior.
Copia y pega el código a continuación en la página de la execution function y haz clic en Save Script.
result = Map();
info productid;
info cxemail;
info cxdate;
info cxaddr;
placeorder = Map();
Accesstoken = invokeurl [ url :"https://test-773793963.development.catalystserverless.com/server/TokenGenerate/execute"
type :GET ]; //Reemplaza el org id de tu proyecto en la URL
info Accesstoken.getJSON("output");
accesstoken = "Zoho-Oauthtoken " + Accesstoken.getJSON("output");
info accesstoken;
header_data = Map();
header_data.put("Content-Type","application/json");
header_data.put("Authorization",accesstoken);
try
{
//CRMresponse = invokeurl
//[
// url :"https://www.zohoapis.com/crm/v2/EcomProducts/" + productid
// tipo :GET
// conexión:"ecommerce"
//];
CRMresponse = invokeurl
[
url :"https://www.zohoapis.com/crm/v2/EcomProducts/" + productid
type :GET
headers:header_data
];
info CRMresponse;
if(CRMresponse.isNull() && CRMresponse.getJSON("status") != "error")
{
stock_count = 0;
info "Empty response. So stock count reset";
placeorder.put("Stiock","Empty");
}
else
{
recordid = CRMresponse.getJSON("data").getJSON("id");
stock_count = CRMresponse.getJSON("data").getJSON("Inventory_Count");
imageurl = CRMresponse.getJSON("data").getJSON("Product_image_url");
productname = CRMresponse.getJSON("data").getJSON("Name");
price = CRMresponse.getJSON("data").getJSON("Price");
}
}
catch (e)
{
info e.lineNo;
// Muestra el número de línea de la sentencia que causó el error
info e.message;
// Muestra el mensaje de error
info e;
// Muestra tanto el número de línea como el mensaje de error
}
if(stock_count > 0)
{
stock_count = stock_count - 1;
reduceStock = Map();
reduceStock.put("id",recordid);
reduceStock.put("Inventory_Count",stock_count);
updatedata = list();
updatedata.add(reduceStock);
updatedatamap = Map();
updatedatamap.put("data",updatedata);
//updateResp = invokeurl
//[
// url :"https://www.zohoapis.com/crm/v2/EcomProducts"
// tipo: PUT
// parameters:updatedatamap.toString()
// conexión:"ecommerce"
//];
updateResp = invokeurl
[
url :"https://www.zohoapis.com/crm/v2/EcomProducts"
type :PUT
parameters:updatedatamap.toString()
headers:header_data
];
info updateResp;
//info zoho.crm.updateRecord("EcomProducts",productid,reduceStock);
placeorder.put("Name",productname + " " + cxdate);
placeorder.put("Product_Name",productname);
placeorder.put("Email",cxemail);
placeorder.put("Delivery_Address",cxaddr);
placeorder.put("Expected_Delivery_Date",cxdate.toDate("yyyy-mm-dd"));
info toDate(cxdate,"yyyy-mm-dd");
info toDate(cxdate,"MM,d,yyyy");
placeorder.put("product_image_url",imageurl);
placeorder.put("Price",price);
placeorder.put("OrderID",productid + "_" + randomNumber(1111111,9999999));
placeorder.put("Order_Status","Reviewing the Order");
info placeorder;
insertdata = list();
insertdata.add(placeorder);
insertdatamap = Map();
insertdatamap.put("data",insertdata);
//insertResp = invokeurl
//[
// url :"https://www.zohoapis.com/crm/v2/Orders"
// tipo: POST
// parameters:insertdatamap.toString()
// conexión:"ecommerce"
//];
insertResp = invokeurl
[
url :"https://www.zohoapis.com/crm/v2/Orders"
type :POST
parameters:insertdatamap.toString()
headers:header_data
];
info insertResp;
//info zoho.crm.createRecord("Orders",placeorder);
result.put("message","Your order for the product - " + CRMresponse.getJSON("data").getJSON("Name") + " is placed successfully. It will be tried to be delivered on " + cxdate + " to " + cxaddr + " . Our Sales team will reach out to your via email to discuss about COD or prepayment before delivery.");
}
else if(stock_count == 0)
{
info "The item is out of stock. Please retry after some days as we restock.";
result.put("message","The item is out of stock. Please retry after some days as we restock.");
}
else
{
result.put("message","There was some issue during the order. Please contact support team. They shall assist in placing this order for you.");
}
info stock_count;
//zoho.crm.updateRecord("EcomProducts",productid, )
//result.put("message","Function executed successfully");
broadcast.put("cxemail",cxemail);
result.put("broadcast",broadcast);
return result;
- Similar a la action anterior, puedes probar la action simultáneamente desde el editor de Deluge de ConvoKraft y luego hacer clic en DONE.

View Order Details
-
Crea una nueva action y elige configurar una respuesta basada en lógica de negocio. Nómbrala como “View Order Details”.
-
Agrega las siguientes sample sentences para la action:
- “Where is my order?”
- “I want to view my order details of email id amelia.burrows@zylker.com”
- “I want to check my order details”

-
Define los params especificados a continuación para la action como se discutió en la última sección. Puedes asociar los params con la sample sentence como se muestra en la captura de pantalla anterior y hacer clic en Save.
| Param Type | Name | Prompt message | Prompt message for validation failure |
|---|---|---|---|
| cxemail | Please provide the email ID associated with your order | The entered email ID is invalid. Please check and retry. |
- Después de definir las sample sentences y params para la action, se mostrará la página de Details de la Action. Para esta action, configuraremos la Context handler function junto con la Execution function. Esto se utiliza para almacenar la dirección de email del usuario en el argumento broadcast de la execution function e instruir al bot de ConvoKraft para que recuerde la dirección de email en las conversaciones posteriores de la sesión de chat en lugar de solicitarla al usuario cada vez.
Copia y pega el código a continuación en la página de la execution function y haz clic en Save Script.
result = Map();
// realizando llamada API para buscar detalles específicos del pedido del email id dado
//resp = zoho.crm.searchRecords("Orders","(Email:equals:" + cxemail + ")");
//extrayendo los detalles requeridos de la respuesta JSON
//info resp;
cardlist = List();
Accesstoken = invokeurl
[
url :"https://test-773793963.development.catalystserverless.com/server/TokenGenerate/execute"
type :GET
];
info Accesstoken.getJSON("output");
accesstoken = "Zoho-Oauthtoken " + Accesstoken.getJSON("output");
info accesstoken;
header_data = Map();
header_data.put("Content-Type","application/json");
header_data.put("Authorization",accesstoken);
//resp = invokeurl
//[
// url :"https://www.zohoapis.com/crm/v3/Orders/search?criteria=" + "((Email:equals:" + cxemail + "))"
// tipo :GET
// conexión:"ecommerce"
//];
resp = invokeurl
[
url :"https://www.zohoapis.com/crm/v4/Orders/search?criteria=" + "((Email:equals:" + cxemail + "))"
type :GET
headers:header_data
];
info resp;
items_count = 0;
if(!resp.isEmpty())
{
for each order in resp.getJSON("data")
{
items_count = items_count + 1;
info "+++++++++++";
// información del pedido;
orderid = order.getJSON("id");
//CRMresponse = invokeurl
//[
// url :"https://www.zohoapis.com/crm/v3/Orders/" + orderid
// tipo :GET
// conexión:"ecommerce"
//];
CRMresponse = invokeurl
[
url :"https://www.zohoapis.com/crm/v3/Orders/" + orderid
type :GET
headers:header_data
];
name = order.getJSON("Name");
contact = order.getJSON("Contact_No").toString();
email = order.getJSON("Email");
product_name = order.getJSON("Product_Name");
orderid = order.getJSON("OrderID").toString();
price = order.getJSON("Price").toString();
delivery_date = order.getJSON("Expected_Delivery_Date");
delivery_address = order.getJSON("Delivery_Address");
order_status = order.getJSON("Order_Status");
//definiendo la lista con viñetas
listItem = Map();
listItem.put("type","list");
listItem.put("format","bullet");
listElements = List();
elem1 = {"label":"Name : " + name};
elem2 = {"label":"Contact No :" + contact};
elem3 = {"label":"Email ID : " + email};
elem4 = {"label":"Product Name : " + product_name};
//elem5 = {"label":"Order ID : " + orderid};
elem6 = {"label":"Total Price : $ " + price};
elem7 = {"label":"Expected Delivery Date : " + delivery_date};
elem8 = {"label":"Delivery Address : " + delivery_address};
elem9 = {"label":"Order Status : " + order_status};
listElements.add(elem1);
listElements.add(elem2);
listElements.add(elem3);
listElements.add(elem4);
//listElements.add(elem5);
listElements.add(elem6);
listElements.add(elem7);
listElements.add(elem8);
listElements.add(elem9);
listItem.put("elements",listElements);
//info listItem;
// definiendo la tarjeta 'image'
// definiendo la tarjeta 'note'
productNote = Map();
productNote.put("type","note");
productNote.put("content",items_count + ") Your order details for order id : " + orderid + " are listed as follows: ");
cardlist.add(productNote);
productPic = Map();
productPic.put("type","image");
productPic.put("content",CRMresponse.getJSON("data").getJSON("product_image_url"));
cardlist.add(productPic);
cardlist.add(listItem);
info "+++++++++++";
}
//info cardlist;
result.put("card",cardlist);
}
else
{
}
// definir difusión
broadcast.put("cxemail",email);
result.put("broadcast",broadcast);
result.put("message","The Shoppers Stores. You don't have an order.");
return result;
-
Navega de regreso a la página de Details de la Action y habilita la Context Handler Function como se muestra en la captura de pantalla a continuación.

-
Después de habilitar la Context handler function, haz clic en OK en la ventana emergente que aparece para continuar.

-
Ahora, copia y pega el código a continuación en el editor de la Context handler function y haz clic en Save Script.
result = Map();
assign = Map();
if(broadcast != null)
{
//verificando si el argumento 'broadcast' tiene algún dato
cxemailid = broadcast.get("cxemailid");
//obteniendo el valor de 'cxemailid' de 'broadcast'
assign.put("cxemailid",cxemailid);
//asignando el valor de cxemailid al parámetro 'cxemailid'
result.put("assign",assign);
result.put("todo","execute");
// salta a la función de ejecución
}
result.put("todo","prompt");
return result;
-
Haz clic en Test this action y prueba las configuraciones actualizadas de esta action de manera similar a las actions anteriores.

-
Después de probar los cambios, haz clic en DONE.
Change Delivery Address
- Similar a las actions creadas anteriormente, configuraremos la respuesta de esta action para que se base en una lógica de negocio. Ingresa el nombre de la action como “Change Delivery Address”. Para esta action, puedes definir las sample sentences que se indican a continuación:
- “I want my order to be delivered at a different address”
- “I want to change delivery address for my order id 5804508000000460006 under the email amelia.burrows@zylker.com”
Agrega los params indicados a continuación para la action:
| Param Type | Name | Prompt message | Prompt message for validation failure |
|---|---|---|---|
| cxemail | Please provide the email ID associated with your order. | The entered email ID is invalid. Please check and retry. | |
| String | cxorderid | Please enter your Order ID. | The entered OrderID is invalid. Please check and retry. |
| String | cxaddr | Please enter the address where you want the order to be delivered. | The entered address is invalid. Please check and retry. |
Puedes asociar el param “cxemail” a la sample sentence como se muestra en la captura de pantalla a continuación.
- Después de configurar las sample sentences y params, copia y pega el código a continuación en la página de la execution function y haz clic en Save Script.
result = Map();
//obteniendo el 'id' del pedido del argumento de caché
Accesstoken = invokeurl
[
url :"https://test-773793963.development.catalystserverless.com/server/TokenGenerate/execute"
type :GET
];
info Accesstoken.getJSON("output");
accesstoken = "Zoho-Oauthtoken " + Accesstoken.getJSON("output");
info accesstoken;
header_data = Map();
header_data.put("Content-Type","application/json");
header_data.put("Authorization",accesstoken);
addrmap = Map();
//addrmap.put("Delivery_Address",cxaddr);
//reduceStock = Map();
searchOrderresp = invokeurl
[
url :"https://www.zohoapis.com/crm/v2/Orders/search?criteria=((OrderID:equals:" + cxorderid + "))"
type :GET
headers:header_data
];
recordid = searchOrderresp.getJSON("data").getJSON("id");
addrmap.put("id",recordid);
addrmap.put("Delivery_Address",cxaddr);
updatedata = list();
updatedata.add(addrmap);
updatedatamap = Map();
updatedatamap.put("data",updatedata);
updateResp = invokeurl
[
url :"https://www.zohoapis.com/crm/v2/Orders"
type :PUT
parameters:updatedatamap.toString()
headers:header_data
];
//realizando una llamada API para reprogramar el pedido a la fecha dada
broadcast.put("cxemail",cxemail);
//configurando el argumento 'broadcast'
result.put("broadcast",broadcast);
result.put("message","Your order has been rescheduled successfully.");
return result;
- Nuevamente, prueba la action usando la ventana de chat Test this Action iniciando conversaciones relacionadas con esta action.

Re-schedule order date
- Ingresa el nombre de la action como “Reschedule order to later date”. Para esta action, puedes definir las sample sentences que se indican a continuación:
- “Reschedule my order to later date”
- “Postpone the delivery date of my order”
- “I want to change my orders delivery date as 19/07/2023 for my order id 5804508000000460006 of my email amelia.burrows@zylker.com”
Agrega los params a continuación para la action:
| Param Type | Name | Prompt message | Prompt message for validation failure |
|---|---|---|---|
| cxemail | Please provide the email ID associated with your order. | The entered email ID is invalid. Please check and retry. | |
| String | cxorderid | Please enter your Order ID. | The entered OrderID is invalid. Please check and retry. |
| Date | cxdate | Mention the date you would like to reschedule your order | The entered date is invalid. Please check and retry. |
Puedes asociar los params como se muestra en la captura de pantalla a continuación y hacer clic en Save.
- Después de configurar las sample sentences y params, copia y pega el código a continuación en la página de la execution function y haz clic en Save Script.
result = Map();
//obteniendo el 'id' del pedido del argumento de caché
Accesstoken = invokeurl
[
url :"https://test-773793963.development.catalystserverless.com/server/TokenGenerate/execute"
type :GET
];
info Accesstoken.getJSON("output");
accesstoken = "Zoho-Oauthtoken " + Accesstoken.getJSON("output");
info accesstoken;
header_data = Map();
header_data.put("Content-Type","application/json");
header_data.put("Authorization",accesstoken);
searchOrderresp = invokeurl
[
url :"https://www.zohoapis.com/crm/v2/Orders/search?criteria=((OrderID:equals:" + cxorderid + "))"
type :GET
headers:header_data
];
info searchOrderresp;
recordid = searchOrderresp.getJSON("data").getJSON("id");
info recordid;
datemap = Map();
datemap.put("id",recordid);
datemap.put("Expected_Delivery_Date",cxdate.toDate());
info datemap;
updatedata = list();
updatedata.add(datemap);
updatedatamap = Map();
updatedatamap.put("data",updatedata);
updateResp = invokeurl
[
url :"https://www.zohoapis.com/crm/v2/Orders"
type :PUT
parameters:updatedatamap.toString()
headers:header_data
];
info updateResp;
//realizando una llamada API para reprogramar el pedido a la fecha dada
broadcast.put("cxemail",cxemail);
//configurando el argumento 'broadcast'
result.put("broadcast",broadcast);
result.put("message","Your order has been rescheduled successfully.");
return result;
- Nuevamente, al igual que las actions anteriores, puedes probar esta action también y hacer clic en DONE.

Ahora, hemos configurado todas las actions necesarias y la lógica de negocio para ellas.
Última actualización 2026-03-30 13:40:30 +0530 IST




