{
    "openapi": "3.0.0",
    "info": {
        "version": "2.0.0",
        "title": "Como enviar templates",
        "description": "Essa documentação tem como objetivo explicar como enviar mensagens(templates) através de sua conta de WhatsApp API Oficial, previamente adicionada ao Convert Omnichannel"
    },
    "servers": [
        {
            "url": "https://apihub.convert.app.br/api"
        },
        {
            "url": "https://apihub.letteldata.com.br/api"
        }
    ],
    "tags": [
        {
            "name": "Envio de templates",
            "description": "Envio de templates para o WhatsApp"
        }
    ],
    "paths": {
        "/v1/omni/saida": {
            "post": {
                "summary": "Enviar uma mensagem",
                "description": "Essa rota tem como objetivo enviar uma mensagem através de um template previamente cadastrado na plataforma do WhatsApp",
                "tags": [
                    "Envio de templates"
                ],
                "security": [
                    {
                        "bearerAuth": []
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "identificador",
                                    "tituloTemplate",
                                    "destino"
                                ],
                                "properties": {
                                    "identificador": {
                                        "type": "string",
                                        "example": "555421037000",
                                        "description": "Identificador do canal, número da conta da sua empresa no WhatsApp, somente números, com DDI e DDD"
                                    },
                                    "agente": {
                                        "type": "string",
                                        "example": "CHbfaCxKNvLbLwJQi6",
                                        "description": "ID do usuário no Omnichannel para vínculo do atendimento, não é obrigatório"
                                    },
                                    "departamento": {
                                        "type": "string",
                                        "example": "DAkwZMmsAqdKZ3N",
                                        "description": "ID do departamento no Omnichannel para vínculo do atendimento, não é obrigatório"
                                    },
                                    "destino": {
                                        "type": "string",
                                        "example": "WHATS-5554984086070",
                                        "description": "Número de telefone do contato que irá receber a mensagem, deve obrigatóriamente ser formatado com DDI e DDD, somente números, deve sempre ser prefixado com 'WHATS-'"
                                    },
                                    "tituloTemplate": {
                                        "type": "string",
                                        "example": "primeiro_contato",
                                        "description": "ID ou título do template cadastrado na plataforma do WhatsApp"
                                    },
                                    "nomeContato": {
                                        "type": "string",
                                        "example": "João da Silva",
                                        "description": "Nome do contato para cadastro na central de contatos do Omnichannel"
                                    },
                                    "params": {
                                        "type": "array",
                                        "items": {
                                            "type": "string"
                                        },
                                        "example": [
                                            "Boa tarde",
                                            "João"
                                        ],
                                        "description": "Array com as variáveis do template, na ordem em que foram cadastradas na plataforma do WhatsApp. Caso o template não possua variáveis, esse campo pode ser omitido"
                                    },
                                    "campanha": {
                                        "type": "string",
                                        "example": "Confirmação de agenda",
                                        "description": "Identificador vinculado aos envios, para tratativas de resposta, podendo redirecionar o atendimento dentro do fluxo ou utilizar como filtro para relatórios"
                                    },
                                    "fields": {
                                        "type": "array",
                                        "description": "Array de objetos com campos customizados para serem definidos no atendimento do Omnichannel, útil quando você quer adicionar uma tag para rastreio ou incluir algum dado para tratativa da resposta, é necessário cadastrar um campo customizado antes de utilizar esse recurso",
                                        "items": {
                                            "type": "object",
                                            "properties": {
                                                "tags": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "string"
                                                    },
                                                    "example": [
                                                        "Confirmação de agenda",
                                                        "Consulta"
                                                    ],
                                                    "description": "Tags para adicionar ao atendimento, útil para rastreio e relatórios"
                                                },
                                                "{identificador_do_campo}": {
                                                    "type": "string",
                                                    "example": "Confirmação de agenda",
                                                    "description": "Campo customizado cadastrado no Omnichannel"
                                                }
                                            }
                                        },
                                        "example": [
                                            {
                                                "tags": [
                                                    "Confirmação de agenda",
                                                    "Consulta"
                                                ]
                                            },
                                            {
                                                "id_agendamento": "123456789"
                                            }
                                        ]
                                    },
                                    "criarSala": {
                                        "type": "boolean",
                                        "example": true,
                                        "description": "Parâmetro para habilitar a criação de uma sala no Omnichannel"
                                    },
                                    "document": {
                                        "type": "object",
                                        "description": "Configuração de um documento caso seja um template do tipo documento",
                                        "required": [
                                            "link",
                                            "filename"
                                        ],
                                        "properties": {
                                            "link": {
                                                "type": "string",
                                                "example": "https://www.africau.edu/images/default/sample.pdf",
                                                "description": "Link público da mídia"
                                            },
                                            "filename": {
                                                "type": "string",
                                                "example": "Manual de instruções",
                                                "description": "Nome da mídia"
                                            }
                                        }
                                    },
                                    "image": {
                                        "type": "object",
                                        "description": "Link de uma imagem caso seja um template que aceita imagens",
                                        "required": [
                                            "link",
                                            "filename"
                                        ],
                                        "properties": {
                                            "link": {
                                                "type": "string",
                                                "example": "https://www.africau.edu/images/default/sample.png",
                                                "description": "Link público da mídia"
                                            },
                                            "filename": {
                                                "type": "string",
                                                "example": "Sample",
                                                "description": "Nome da mídia"
                                            }
                                        }
                                    },
                                    "video": {
                                        "type": "object",
                                        "description": "Link de um vídeo caso seja um template que aceita vídeos",
                                        "required": [
                                            "link",
                                            "filename"
                                        ],
                                        "properties": {
                                            "link": {
                                                "type": "string",
                                                "example": "https://www.africau.edu/images/default/video.mp4",
                                                "description": "Link público da mídia"
                                            },
                                            "filename": {
                                                "type": "string",
                                                "example": "Sample",
                                                "description": "Nome da mídia"
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Mensagem enviada com sucesso",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "status": {
                                            "type": "integer",
                                            "example": 200
                                        },
                                        "codAtendimento": {
                                            "type": "integer",
                                            "example": 2862
                                        },
                                        "message": {
                                            "type": "string",
                                            "example": "Mensagem de saída posicionada para envio. Atendimento 2862 (Consultar logs do Omni)"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "500": {
                        "description": "Erro ao realizar o envio, parâmetros ausentes, token inválido",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "status": {
                                            "type": "integer",
                                            "example": 500
                                        },
                                        "message": {
                                            "type": "string",
                                            "example": "Token de cliente inválido."
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/v1/omni/status_envio_templates": {
            "post": {
                "summary": "Buscar status de envios",
                "description": "Essa rota tem como objetivo buscar o status de envios realizados para um contato",
                "tags": [
                    "Envio de templates"
                ],
                "security": [
                    {
                        "bearerAuth": []
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "identificador",
                                    "data"
                                ],
                                "properties": {
                                    "identificador": {
                                        "type": "string",
                                        "example": "555421037000",
                                        "description": "Identificador do canal, número da conta da sua empresa no WhatsApp, somente números, com DDI e DDD"
                                    },
                                    "destino": {
                                        "type": "string",
                                        "example": "5554984086070",
                                        "description": "Telefone do contato de destino que recebeu a mensagem, deve ser formatado com DDI e DDD, somente números"
                                    },
                                    "atendimento": {
                                        "type": "string",
                                        "example": "2862",
                                        "description": "Identificador do atendimento, previamente recebido como resposta na API de enviar mensagem, não é obrigatório, e se passado retorna somente o objeto com os dados do atendimento"
                                    },
                                    "data": {
                                        "type": "string",
                                        "example": "2022-01-01",
                                        "description": "Filtro pela data de envio do template, é opcional apenas se você passar o campo 'atendimento'"
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Resposta se a requisição for feita com sucesso",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "templates": {
                                            "type": "array",
                                            "items": {
                                                "type": "object",
                                                "properties": {
                                                    "atendimento": {
                                                        "type": "integer",
                                                        "description": "Identificador do atendimento",
                                                        "example": 2862
                                                    },
                                                    "origem": {
                                                        "type": "string",
                                                        "description": "Número de telefone do contato que enviou a mensagem",
                                                        "example": "555421037000"
                                                    },
                                                    "destino": {
                                                        "type": "string",
                                                        "description": "Número de telefone do contato que recebeu a mensagem",
                                                        "example": "5554984086070"
                                                    },
                                                    "msg": {
                                                        "type": "string",
                                                        "description": "Mensagem enviada",
                                                        "example": "Olá Gabriel, tudo bem, você possui uma agenda para dia 20/05 as 14h, você confirma?"
                                                    },
                                                    "enviado": {
                                                        "type": "integer",
                                                        "description": "Status do envio, 1 para enviado, 0 para não enviado",
                                                        "example": 1
                                                    },
                                                    "entregue": {
                                                        "type": "integer",
                                                        "description": "Status da entrega, 1 para entregue, 0 para não entregue",
                                                        "example": 1
                                                    },
                                                    "lido": {
                                                        "type": "integer",
                                                        "description": "Status da leitura, 1 para lido, 0 para não lido",
                                                        "example": 1
                                                    },
                                                    "resposta": {
                                                        "type": "string",
                                                        "example": null
                                                    },
                                                    "criado_em": {
                                                        "type": "string",
                                                        "description": "Data de criação do atendimento",
                                                        "example": "2022-01-01 14:47:15.000000"
                                                    },
                                                    "atualizado_em": {
                                                        "type": "string",
                                                        "description": "Data de atualização do atendimento",
                                                        "example": "2022-01-01 14:47:15.000000"
                                                    },
                                                    "erro": {
                                                        "type": "string",
                                                        "description": "Mensagem de erro caso tenha ocorrido algum erro no envio",
                                                        "example": "(132000) O número de valores de parâmetros variáveis incluídos na solicitação não corresponde ao número de parâmetros variáveis definidos no modelo."
                                                    },
                                                    "codigo_erro": {
                                                        "type": "integer",
                                                        "description": "Código do erro na Meta caso tenha ocorrido algum erro no envio",
                                                        "example": 132000
                                                    }
                                                }
                                            }
                                        },
                                        "success": {
                                            "type": "boolean",
                                            "example": true
                                        },
                                        "count": {
                                            "type": "integer",
                                            "example": 1
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Erro ao consultar envios de templates",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "status": {
                                            "type": "integer",
                                            "example": 401
                                        },
                                        "message": {
                                            "type": "string",
                                            "example": "Parâmetros ausentes (identificador, data ou destino)"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}