Enviar ubicación
curl --request POST \
--url https://api.omni.z-api.io/v1/channels/{channelId}/messages \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"recipient": {
"identifier": "5544936181064",
"name": "Nombre del Destinatario",
"subject": "Título",
"picture": ""
},
"sender": {
"identifier": "5544936181064",
"name": "Nombre del Remitente",
"picture": ""
},
"content": {
"type": "LOCATION",
"attachments": [
{
"name": "Google Brasil",
"address": "Av. Brg. Faria Lima, 3477 - Itaim Bibi, São Paulo - SP, 04538-133",
"latitude": "-23.0696347",
"longitude": "-50.4357913"
}
]
}
}
'import requests
url = "https://api.omni.z-api.io/v1/channels/{channelId}/messages"
payload = {
"recipient": {
"identifier": "5544936181064",
"name": "Nombre del Destinatario",
"subject": "Título",
"picture": ""
},
"sender": {
"identifier": "5544936181064",
"name": "Nombre del Remitente",
"picture": ""
},
"content": {
"type": "LOCATION",
"attachments": [
{
"name": "Google Brasil",
"address": "Av. Brg. Faria Lima, 3477 - Itaim Bibi, São Paulo - SP, 04538-133",
"latitude": "-23.0696347",
"longitude": "-50.4357913"
}
]
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
recipient: {
identifier: '5544936181064',
name: 'Nombre del Destinatario',
subject: 'Título',
picture: ''
},
sender: {identifier: '5544936181064', name: 'Nombre del Remitente', picture: ''},
content: {
type: 'LOCATION',
attachments: [
{
name: 'Google Brasil',
address: 'Av. Brg. Faria Lima, 3477 - Itaim Bibi, São Paulo - SP, 04538-133',
latitude: '-23.0696347',
longitude: '-50.4357913'
}
]
}
})
};
fetch('https://api.omni.z-api.io/v1/channels/{channelId}/messages', 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/v1/channels/{channelId}/messages",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'recipient' => [
'identifier' => '5544936181064',
'name' => 'Nombre del Destinatario',
'subject' => 'Título',
'picture' => ''
],
'sender' => [
'identifier' => '5544936181064',
'name' => 'Nombre del Remitente',
'picture' => ''
],
'content' => [
'type' => 'LOCATION',
'attachments' => [
[
'name' => 'Google Brasil',
'address' => 'Av. Brg. Faria Lima, 3477 - Itaim Bibi, São Paulo - SP, 04538-133',
'latitude' => '-23.0696347',
'longitude' => '-50.4357913'
]
]
]
]),
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/v1/channels/{channelId}/messages"
payload := strings.NewReader("{\n \"recipient\": {\n \"identifier\": \"5544936181064\",\n \"name\": \"Nombre del Destinatario\",\n \"subject\": \"Título\",\n \"picture\": \"\"\n },\n \"sender\": {\n \"identifier\": \"5544936181064\",\n \"name\": \"Nombre del Remitente\",\n \"picture\": \"\"\n },\n \"content\": {\n \"type\": \"LOCATION\",\n \"attachments\": [\n {\n \"name\": \"Google Brasil\",\n \"address\": \"Av. Brg. Faria Lima, 3477 - Itaim Bibi, São Paulo - SP, 04538-133\",\n \"latitude\": \"-23.0696347\",\n \"longitude\": \"-50.4357913\"\n }\n ]\n }\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.omni.z-api.io/v1/channels/{channelId}/messages")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"recipient\": {\n \"identifier\": \"5544936181064\",\n \"name\": \"Nombre del Destinatario\",\n \"subject\": \"Título\",\n \"picture\": \"\"\n },\n \"sender\": {\n \"identifier\": \"5544936181064\",\n \"name\": \"Nombre del Remitente\",\n \"picture\": \"\"\n },\n \"content\": {\n \"type\": \"LOCATION\",\n \"attachments\": [\n {\n \"name\": \"Google Brasil\",\n \"address\": \"Av. Brg. Faria Lima, 3477 - Itaim Bibi, São Paulo - SP, 04538-133\",\n \"latitude\": \"-23.0696347\",\n \"longitude\": \"-50.4357913\"\n }\n ]\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.omni.z-api.io/v1/channels/{channelId}/messages")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"recipient\": {\n \"identifier\": \"5544936181064\",\n \"name\": \"Nombre del Destinatario\",\n \"subject\": \"Título\",\n \"picture\": \"\"\n },\n \"sender\": {\n \"identifier\": \"5544936181064\",\n \"name\": \"Nombre del Remitente\",\n \"picture\": \"\"\n },\n \"content\": {\n \"type\": \"LOCATION\",\n \"attachments\": [\n {\n \"name\": \"Google Brasil\",\n \"address\": \"Av. Brg. Faria Lima, 3477 - Itaim Bibi, São Paulo - SP, 04538-133\",\n \"latitude\": \"-23.0696347\",\n \"longitude\": \"-50.4357913\"\n }\n ]\n }\n}"
response = http.request(request)
puts response.read_body{
"messageId": "01A0C92D0C957FE98B73C8BA0CACF741"
}Mensajes
Enviar ubicación
Envía mensajes de ubicación
POST
/
v1
/
channels
/
{channelId}
/
messages
Enviar ubicación
curl --request POST \
--url https://api.omni.z-api.io/v1/channels/{channelId}/messages \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"recipient": {
"identifier": "5544936181064",
"name": "Nombre del Destinatario",
"subject": "Título",
"picture": ""
},
"sender": {
"identifier": "5544936181064",
"name": "Nombre del Remitente",
"picture": ""
},
"content": {
"type": "LOCATION",
"attachments": [
{
"name": "Google Brasil",
"address": "Av. Brg. Faria Lima, 3477 - Itaim Bibi, São Paulo - SP, 04538-133",
"latitude": "-23.0696347",
"longitude": "-50.4357913"
}
]
}
}
'import requests
url = "https://api.omni.z-api.io/v1/channels/{channelId}/messages"
payload = {
"recipient": {
"identifier": "5544936181064",
"name": "Nombre del Destinatario",
"subject": "Título",
"picture": ""
},
"sender": {
"identifier": "5544936181064",
"name": "Nombre del Remitente",
"picture": ""
},
"content": {
"type": "LOCATION",
"attachments": [
{
"name": "Google Brasil",
"address": "Av. Brg. Faria Lima, 3477 - Itaim Bibi, São Paulo - SP, 04538-133",
"latitude": "-23.0696347",
"longitude": "-50.4357913"
}
]
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
recipient: {
identifier: '5544936181064',
name: 'Nombre del Destinatario',
subject: 'Título',
picture: ''
},
sender: {identifier: '5544936181064', name: 'Nombre del Remitente', picture: ''},
content: {
type: 'LOCATION',
attachments: [
{
name: 'Google Brasil',
address: 'Av. Brg. Faria Lima, 3477 - Itaim Bibi, São Paulo - SP, 04538-133',
latitude: '-23.0696347',
longitude: '-50.4357913'
}
]
}
})
};
fetch('https://api.omni.z-api.io/v1/channels/{channelId}/messages', 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/v1/channels/{channelId}/messages",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'recipient' => [
'identifier' => '5544936181064',
'name' => 'Nombre del Destinatario',
'subject' => 'Título',
'picture' => ''
],
'sender' => [
'identifier' => '5544936181064',
'name' => 'Nombre del Remitente',
'picture' => ''
],
'content' => [
'type' => 'LOCATION',
'attachments' => [
[
'name' => 'Google Brasil',
'address' => 'Av. Brg. Faria Lima, 3477 - Itaim Bibi, São Paulo - SP, 04538-133',
'latitude' => '-23.0696347',
'longitude' => '-50.4357913'
]
]
]
]),
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/v1/channels/{channelId}/messages"
payload := strings.NewReader("{\n \"recipient\": {\n \"identifier\": \"5544936181064\",\n \"name\": \"Nombre del Destinatario\",\n \"subject\": \"Título\",\n \"picture\": \"\"\n },\n \"sender\": {\n \"identifier\": \"5544936181064\",\n \"name\": \"Nombre del Remitente\",\n \"picture\": \"\"\n },\n \"content\": {\n \"type\": \"LOCATION\",\n \"attachments\": [\n {\n \"name\": \"Google Brasil\",\n \"address\": \"Av. Brg. Faria Lima, 3477 - Itaim Bibi, São Paulo - SP, 04538-133\",\n \"latitude\": \"-23.0696347\",\n \"longitude\": \"-50.4357913\"\n }\n ]\n }\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.omni.z-api.io/v1/channels/{channelId}/messages")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"recipient\": {\n \"identifier\": \"5544936181064\",\n \"name\": \"Nombre del Destinatario\",\n \"subject\": \"Título\",\n \"picture\": \"\"\n },\n \"sender\": {\n \"identifier\": \"5544936181064\",\n \"name\": \"Nombre del Remitente\",\n \"picture\": \"\"\n },\n \"content\": {\n \"type\": \"LOCATION\",\n \"attachments\": [\n {\n \"name\": \"Google Brasil\",\n \"address\": \"Av. Brg. Faria Lima, 3477 - Itaim Bibi, São Paulo - SP, 04538-133\",\n \"latitude\": \"-23.0696347\",\n \"longitude\": \"-50.4357913\"\n }\n ]\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.omni.z-api.io/v1/channels/{channelId}/messages")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"recipient\": {\n \"identifier\": \"5544936181064\",\n \"name\": \"Nombre del Destinatario\",\n \"subject\": \"Título\",\n \"picture\": \"\"\n },\n \"sender\": {\n \"identifier\": \"5544936181064\",\n \"name\": \"Nombre del Remitente\",\n \"picture\": \"\"\n },\n \"content\": {\n \"type\": \"LOCATION\",\n \"attachments\": [\n {\n \"name\": \"Google Brasil\",\n \"address\": \"Av. Brg. Faria Lima, 3477 - Itaim Bibi, São Paulo - SP, 04538-133\",\n \"latitude\": \"-23.0696347\",\n \"longitude\": \"-50.4357913\"\n }\n ]\n }\n}"
response = http.request(request)
puts response.read_body{
"messageId": "01A0C92D0C957FE98B73C8BA0CACF741"
}En implementación. En WhatsApp Web, el nombre del lugar no se reenvía: el campo
name todavía no se envía a WhatsApp. La corrección está en curso.Conceptos
Envía un mensaje de ubicación a un contacto. El campocontent.type debe ser LOCATION y las coordenadas se indican en el array attachments mediante latitude y longitude.
Los campos name y address son opcionales y permiten mostrar el nombre y la dirección del lugar directamente en el mensaje.
Envía latitude y longitude en texto, como en el ejemplo: "-23.0696347".
La API no valida los campos
latitude y longitude. Las peticiones que no incluyan esos valores se aceptarán, pero el mensaje no mostrará la ubicación correctamente en WhatsApp. Indica siempre ambos campos.Detalles de la regla de Meta Cloud API en ventana de conversación. Consulta qué acepta cada canal para todos los canales.
Con el canal desconectado, la API rechaza el envío con
422 y subCode CHANNEL_DISCONNECTED, y el mensaje no se envía. Consulta Errores al enviar.Autorizaciones
Secret Key generada en el panel de Seguridad de Omni Z-API
Parámetros de ruta
ID del canal
Ejemplo:
"SU_CHANNEL_ID"
Cuerpo
application/json
Respuesta
Mensaje enviado correctamente
ID del mensaje enviado — hexadecimal de 32 caracteres en mayúsculas