Editar plantilla
curl --request PUT \
--url https://api.omni.z-api.io/whatsapp/businesses/{wabaId}/templates/{templateId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "actualizacion_pedido_v1",
"category": "UTILITY",
"language": "es_ES",
"components": [
{
"type": "BODY",
"text": "Hola {{1}}, tu pedido {{2}} se ha actualizado a {{3}}.",
"example": {
"body_text": [
[
"Ana",
"PED-1024",
"em transporte"
]
]
}
}
]
}
'import requests
url = "https://api.omni.z-api.io/whatsapp/businesses/{wabaId}/templates/{templateId}"
payload = {
"name": "actualizacion_pedido_v1",
"category": "UTILITY",
"language": "es_ES",
"components": [
{
"type": "BODY",
"text": "Hola {{1}}, tu pedido {{2}} se ha actualizado a {{3}}.",
"example": { "body_text": [["Ana", "PED-1024", "em transporte"]] }
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'actualizacion_pedido_v1',
category: 'UTILITY',
language: 'es_ES',
components: [
{
type: 'BODY',
text: 'Hola {{1}}, tu pedido {{2}} se ha actualizado a {{3}}.',
example: {body_text: [['Ana', 'PED-1024', 'em transporte']]}
}
]
})
};
fetch('https://api.omni.z-api.io/whatsapp/businesses/{wabaId}/templates/{templateId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.omni.z-api.io/whatsapp/businesses/{wabaId}/templates/{templateId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'actualizacion_pedido_v1',
'category' => 'UTILITY',
'language' => 'es_ES',
'components' => [
[
'type' => 'BODY',
'text' => 'Hola {{1}}, tu pedido {{2}} se ha actualizado a {{3}}.',
'example' => [
'body_text' => [
[
'Ana',
'PED-1024',
'em transporte'
]
]
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.omni.z-api.io/whatsapp/businesses/{wabaId}/templates/{templateId}"
payload := strings.NewReader("{\n \"name\": \"actualizacion_pedido_v1\",\n \"category\": \"UTILITY\",\n \"language\": \"es_ES\",\n \"components\": [\n {\n \"type\": \"BODY\",\n \"text\": \"Hola {{1}}, tu pedido {{2}} se ha actualizado a {{3}}.\",\n \"example\": {\n \"body_text\": [\n [\n \"Ana\",\n \"PED-1024\",\n \"em transporte\"\n ]\n ]\n }\n }\n ]\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://api.omni.z-api.io/whatsapp/businesses/{wabaId}/templates/{templateId}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"actualizacion_pedido_v1\",\n \"category\": \"UTILITY\",\n \"language\": \"es_ES\",\n \"components\": [\n {\n \"type\": \"BODY\",\n \"text\": \"Hola {{1}}, tu pedido {{2}} se ha actualizado a {{3}}.\",\n \"example\": {\n \"body_text\": [\n [\n \"Ana\",\n \"PED-1024\",\n \"em transporte\"\n ]\n ]\n }\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.omni.z-api.io/whatsapp/businesses/{wabaId}/templates/{templateId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"actualizacion_pedido_v1\",\n \"category\": \"UTILITY\",\n \"language\": \"es_ES\",\n \"components\": [\n {\n \"type\": \"BODY\",\n \"text\": \"Hola {{1}}, tu pedido {{2}} se ha actualizado a {{3}}.\",\n \"example\": {\n \"body_text\": [\n [\n \"Ana\",\n \"PED-1024\",\n \"em transporte\"\n ]\n ]\n }\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"success": true
}{
"error": "Newport request failed",
"value": {
"errors": [
{
"description": "",
"name": "META_WHATSAPP_ERROR",
"message": "Tu mensaje no se puede enviar porque incluye contenido que otras personas en Facebook denunciaron como abusivo.",
"code": "368"
}
]
}
}{
"error": 401,
"message": "Unauthorized"
}{
"error": {
"errors": [
{
"code": "100",
"name": "META_WHATSAPP_ERROR",
"subCode": "2388024",
"message": "Invalid parameter",
"description": "There is already Portuguese (BR) content for this template. You can create a new template and try again."
}
]
}
}Plantillas (WhatsApp)
Actualizar plantilla
Actualiza una plantilla existente y reenvíala a aprobación
PUT
/
whatsapp
/
businesses
/
{wabaId}
/
templates
/
{templateId}
Editar plantilla
curl --request PUT \
--url https://api.omni.z-api.io/whatsapp/businesses/{wabaId}/templates/{templateId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "actualizacion_pedido_v1",
"category": "UTILITY",
"language": "es_ES",
"components": [
{
"type": "BODY",
"text": "Hola {{1}}, tu pedido {{2}} se ha actualizado a {{3}}.",
"example": {
"body_text": [
[
"Ana",
"PED-1024",
"em transporte"
]
]
}
}
]
}
'import requests
url = "https://api.omni.z-api.io/whatsapp/businesses/{wabaId}/templates/{templateId}"
payload = {
"name": "actualizacion_pedido_v1",
"category": "UTILITY",
"language": "es_ES",
"components": [
{
"type": "BODY",
"text": "Hola {{1}}, tu pedido {{2}} se ha actualizado a {{3}}.",
"example": { "body_text": [["Ana", "PED-1024", "em transporte"]] }
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'actualizacion_pedido_v1',
category: 'UTILITY',
language: 'es_ES',
components: [
{
type: 'BODY',
text: 'Hola {{1}}, tu pedido {{2}} se ha actualizado a {{3}}.',
example: {body_text: [['Ana', 'PED-1024', 'em transporte']]}
}
]
})
};
fetch('https://api.omni.z-api.io/whatsapp/businesses/{wabaId}/templates/{templateId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.omni.z-api.io/whatsapp/businesses/{wabaId}/templates/{templateId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'actualizacion_pedido_v1',
'category' => 'UTILITY',
'language' => 'es_ES',
'components' => [
[
'type' => 'BODY',
'text' => 'Hola {{1}}, tu pedido {{2}} se ha actualizado a {{3}}.',
'example' => [
'body_text' => [
[
'Ana',
'PED-1024',
'em transporte'
]
]
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.omni.z-api.io/whatsapp/businesses/{wabaId}/templates/{templateId}"
payload := strings.NewReader("{\n \"name\": \"actualizacion_pedido_v1\",\n \"category\": \"UTILITY\",\n \"language\": \"es_ES\",\n \"components\": [\n {\n \"type\": \"BODY\",\n \"text\": \"Hola {{1}}, tu pedido {{2}} se ha actualizado a {{3}}.\",\n \"example\": {\n \"body_text\": [\n [\n \"Ana\",\n \"PED-1024\",\n \"em transporte\"\n ]\n ]\n }\n }\n ]\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://api.omni.z-api.io/whatsapp/businesses/{wabaId}/templates/{templateId}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"actualizacion_pedido_v1\",\n \"category\": \"UTILITY\",\n \"language\": \"es_ES\",\n \"components\": [\n {\n \"type\": \"BODY\",\n \"text\": \"Hola {{1}}, tu pedido {{2}} se ha actualizado a {{3}}.\",\n \"example\": {\n \"body_text\": [\n [\n \"Ana\",\n \"PED-1024\",\n \"em transporte\"\n ]\n ]\n }\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.omni.z-api.io/whatsapp/businesses/{wabaId}/templates/{templateId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"actualizacion_pedido_v1\",\n \"category\": \"UTILITY\",\n \"language\": \"es_ES\",\n \"components\": [\n {\n \"type\": \"BODY\",\n \"text\": \"Hola {{1}}, tu pedido {{2}} se ha actualizado a {{3}}.\",\n \"example\": {\n \"body_text\": [\n [\n \"Ana\",\n \"PED-1024\",\n \"em transporte\"\n ]\n ]\n }\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"success": true
}{
"error": "Newport request failed",
"value": {
"errors": [
{
"description": "",
"name": "META_WHATSAPP_ERROR",
"message": "Tu mensaje no se puede enviar porque incluye contenido que otras personas en Facebook denunciaron como abusivo.",
"code": "368"
}
]
}
}{
"error": 401,
"message": "Unauthorized"
}{
"error": {
"errors": [
{
"code": "100",
"name": "META_WHATSAPP_ERROR",
"subCode": "2388024",
"message": "Invalid parameter",
"description": "There is already Portuguese (BR) content for this template. You can create a new template and try again."
}
]
}
}Conceptos
Actualiza una plantilla existente y la reenvía a la aprobación de Meta. El body es el mismo que se utiliza al crear la plantilla.Al actualizar una plantilla aprobada, esta vuelve al estado
PENDING hasta que Meta la revise de nuevo.El
templateId se obtiene a través del endpoint Listar plantillas.Autorizaciones
Secret Key generada en el panel de Seguridad de Omni Z-API
Parámetros de ruta
ID de la WABA (obtenido con Listar WABAs)
Ejemplo:
"428083093730937"
ID de la plantilla (obtenido con Listar plantillas)
Ejemplo:
"1900296177408890"
Cuerpo
application/json
Nombre de la plantilla (snake_case, sin espacios)
Categoría de la plantilla
Opciones disponibles:
UTILITY, MARKETING, AUTHENTICATION Idioma de la plantilla (p. ej.: es_ES, en_US)
Componentes de la plantilla (HEADER, BODY, FOOTER, BUTTONS)
Respuesta
Plantilla editada correctamente
Indica si la operación se realizó correctamente