Esta integração permite que a sua equipa converse com os seus clientes através de qualquer canal de mensagens através de uma implementação personalizada.
Ligar um canal personalizado
Passo 1: Vá para Definições > Canais
Passo 2: Clique em Adicionar canal > Canal personalizado > Ligar

Passo 3: Introduza o URL do Webhook de destino para onde as mensagens de saída serão enviadas.
Passo 4: Selecione o tipo de ID para o canal > clique em Seguinte
Os tipos de ID são utilizados para a identificação do utilizador e para a comunicação com o seu servidor de integração personalizado.
Existem dois tipos de IDs disponíveis:
Número de telefone: utilize isto se o fornecedor de serviços de mensagens reconhecer contactos com base no número de telefone.
Formato de amostra:
+60177872890
ID personalizado: utilize isto se o fornecedor de serviços de mensagens reconhecer os contactos com base num ID gerado personalizado.
O comprimento máximo dos caracteres é de 50.
A-Z,a-z,0-9,_,=,+,/e@são permitidos.

Passo 5: A caixa de diálogo a seguir fornecerá o ID do canal, o Token da API e a URL do Webhook, por exemplo.
ID do canal:
gfd8g7fd89dgfdToken da API:
aaaxczsadzxcasdacxzcasdaaaxczsadzxcasdacxzcasdURL do Webhook:
https://webhook.respond.io/custom/channel/webhook/A utilização de um tipo de ID de número de telefone permite iniciar uma conversa e enviar a primeira mensagem para um contacto.

Passar mensagens para respond.io
URL do Webhook é usada para publicar as Mensagens, Ecos de Mensagens e Recibos de Mensagens na plataforma respond.io.
O código fornecido irá desencadear o webhook no respond.io, criando um contacto, se necessário, e guardando a mensagem nesse contacto.
Exemplo de mensagens
curl -X POST \\
https://app.respond.io/custom/channel/webhook/ \\
-H 'authorization: Bearer aaaxczsadzxcasdacxzcasdaaaxczsadzxcasdacxzcasd' \\
-H 'cache-control: no-cache' \\
-H 'content-type: application/json' \\
-d '{
"channelId": "gfd8g7fd89dgfd",
"contactId": "+60177872890",
"events": \[
{
"type": "message",
"mId": "xcvzzxcxczxczxc",
"timestamp": 2132131321000,
"message": {
"type": "text",
"text": "Hello World"
}
}
\],
"contact": {
"firstName": "John",
"lastName": "Doe",
"profilePic": "<https://static.independent.co.uk/s3fs-public/thumbnails/image/2015/07/08/14/pic.jpg>",
"countryCode": "MY",
"email": "john@respond.io",
"phone": "+60177872890",
"language": "en"
}
}'},{Amostra para ecos de mensagens
curl -X POST \\
https://webhook.respond.io/custom/channel/webhook/ \\
-H 'authorization: Bearer aaaxczsadzxcasdacxzcasdaaaxczsadzxcasdacxzcasd' \\
-H 'cache-control: no-cache' \\
-H 'content-type: application/json' \\
-d '{
"channelId": "gfd8g7fd89dgfd",
"contactId": "+60177872890",
"events": \[
{
"type": "message_echo",
"mId": "xcvzzxcxczxczxc",
"timestamp": 2132131321000,
"message": {
"type": "text",
"text": "Hello World"
}
}
\],
"contact": {
"firstName": "John",
"lastName": "Doe",
"profilePic": "<https://static.independent.co.uk/s3fs-public/thumbnails/image/2015/07/08/14/pic.jpg>",
"countryCode": "MY",
"email": "john@respond.io",
"phone": "+60177872890",
"language": "en"
}
}'}]}]Exemplo de recibos de mensagens
curl -X POST \\
https://webhook.respond.io/custom/channel/webhook/ \\
-H 'authorization: Bearer aaaxczsadzxcasdacxzcasdaaaxczsadzxcasdacxzcasd' \\
-H 'cache-control: no-cache' \\
-H 'content-type: application/json' \\
-d '{
"channelId": "gfd8g7fd89dgfd",
"contactId": "+60177872890",
"events": \[
{
"type": "message\_status",
"mId": "xcvzzxcxczxczxc",
"timestamp": 2132131321000,
"status": {
"value": "sent|delivered|read|failed",
"message": "Error: Sending failed due to invalid token"
}
}
\],
}'}]}<|future|>AssistantCampo | Descrição | Validação |
|---|---|---|
ID do canal | ID de canal exclusivo | Obrigatório. Campo único. É gerado pelo respond.io. |
ID de contacto | ID de contacto exclusivo | Obrigatório. ID de contacto exclusivo do respond.io. Máximo de 50 caracteres. |
eventos.tipo | Tipo de evento | Obrigatório. Tipos disponíveis: message, message_echo e message_status. |
eventos.mld | ID da mensagem | Obrigatório. ID de mensagem exclusivo. Máximo de 50 caracteres. |
eventos.carimbo de data/hora | Tempo de época UNIX (milissegundos) | Obrigatório. Hora do evento que despoletou o retorno de chamada. |
eventos.mensagem.tipo | Tipo de mensagem | Obrigatório. Tipos de mensagens disponíveis: texto, anexo, localização e resposta rápida. Consulte a secção Tipo de mensagem para outros exemplos de tipos de mensagem. |
eventos.mensagem.texto | Texto da mensagem | Obrigatório. Comprimento máximo de 7.000 caracteres. |
eventos.status.valor | Texto | Obrigatório se event.type for message_status. Valores de estado disponíveis: enviado, entregue, lido e com falha. |
eventos.status.mensagem | Texto | Obrigatório se o events.status.value falhar. |
contacto.primeiroNome | Nome próprio | Opcional. Máximo de 50 caracteres. |
contacto.apelido | Último nome | Opcional. Máximo de 50 caracteres. |
contacto.perfilPic | URL da fotografia de perfil | Opcional. O tamanho do avatar não deve ser superior a 100 kb. Recomendado 720x720. |
contacto.localidade | Código de localidade | Opcional. Consulte aqui a lista de valores. |
contato.codigoPais | Código do país | Opcional. Código de país de 2 letras - Código ISO ALPHA-2. |
contato.fusoHorario | Fuso horário | Opcional. (min.: -24) (máx.: 24). |
contato.email | Endereço de e-mail | Opcional. Máximo de 50 caracteres. |
contato.telefone | Número de telefone | Opcional. Máximo de 18 caracteres. |
contato.idioma | Idioma | Opcional. ISO 639-1. |
Resposta - Sucesso (estado HTTP → 200)
"OK"Gerir mensagens de saída do respond.io
respond.io irá chamar o endpoint <API Base URL>/message
Certifique-se de aplicar o código Mensagem de saída na rota/messagedo seu servidor web.
Eis o exemplo cURL de respond.io a chamar o endpoint:
curl -X POST \\
<API Base URL>/message \\
-H 'authorization: Bearer aaaxczsadzxcasdacxzcasdaaaxczsadzxcasdacxzcasd' \\
-H 'cache-control: no-cache' \\
-H 'content-type: application/json' \\
-d '{
"channelId": "gfd8g7fd89dgfd",
"contactId": "+60177872890",
"message": {
"type": "text",
"text": "Hello World"
}
}'Resposta - Sucesso (estado HTTP → 200)
{
"mId": "1640141607842"
}A autenticação necessita de ocorrer no ponto final antes de enviar a mensagem para o fornecedor de serviços de mensagens.
Aqui está um exemplo de uso de um middleware express para esse propósito:
const {validationResult} = require('express-validator');
const validateToken = (req, res, next) => {
const apiToken = <>;
const bearerToken = req.headers.authorization;
if (!bearerToken) {
return res.send(401);
}
const token = bearerToken.substring(7, bearerToken.length);
if (apiToken !== token) {
return res.send(401);
}
next();
};
module.exports = {
validateToken
};
Incluímos um exemplo de um Canal Personalizado que você pode testar no seu servidor. Confira nosso projeto no GitHub aqui.
Tipo de mensagens
Exemplo de texto
{
"tipo": "texto",
"texto": "Bem-vindo ao respond.io",
}Campo | Descrição | Validação |
|---|---|---|
tipo | Tipo de mensagem | Obrigatório. texto |
texto | Texto da mensagem | Obrigatório. Comprimento máximo de 7.000 caracteres. |
Amostra para arquivo de média
{
"type": "attachment",
"attachment": {
"type": "image|video|audio|file",
"url": "https://abc/japan.png",
"mimeType": "image/png",
"fileName":"company logo.png",
"description": "latest company logo"
}
}Campo | Descrição | Validação |
|---|---|---|
tipo | Tipo de mensagem | Obrigatório. apego. |
anexo.tipo | Tipo de anexo | Obrigatório. Tipos de anexo disponíveis: imagem, vídeo, áudio e ficheiro. |
anexo.url | URL | Obrigatório. Máximo de 2.000 caracteres. Certifique-se de que é um link público para que os utilizadores ou contactos possam ver o conteúdo. |
anexo.mimeType | Tipo MIME do anexo | Opcional |
anexo.nomedoficheiro | Nome do ficheiro | Opcional. O nome do ficheiro deve incluir uma extensão. Máximo de 256 caracteres (incluindo extensão de ficheiro). Enviar um ficheiro sem extensão ou com a extensão errada pode fazer com que o contacto ou utilizador não consiga abrir o ficheiro. |
anexo. descrição | Descrição do ficheiro | Opcional. Máximo de 256 caracteres. Aplicável apenas para attachment.type = image. |
Certifique-se de que a URL do anexo não seja baixada forçadamente pelo navegador. O cabeçalho de resposta HTTP's Content-Disposition deve ter o valor por defeito, que é inline.
Amostra para localização
{
"tipo": "localização",
"latitude": 0,123456,
"longitude": -0.1234,
"endereço": "Sky Suites, Jalan P. Ramlee, Kuala Lumpur, 50250 Kuala Lumpur, Wilayah Persekutuan Kuala Lumpur"
}Campo | Descrição | Validação |
|---|---|---|
tipo | Tipo de mensagem | Obrigatório. localização. |
latitude | Coordenadas | Obrigatório. Latitude (±90°) dentro de intervalos válidos. |
longitude | Coordenadas | Obrigatório. Longitude (±180°) dentro de intervalos válidos. |
morada | Localização Endereço | Opcional. Máximo de 256 caracteres. |
Exemplo de resposta rápida
{
"tipo": "resposta rápida",
"título": "Selecione o seu idioma preferido",
"respostas": \[
"Malaio",
"Inglês"
\]
}Campo | Descrição | Validação |
|---|---|---|
tipo | Tipo de mensagem | Obrigatório. resposta_rápida. |
título | Título da resposta rápida | Obrigatório. Máximo de 256 caracteres. |
respostas | Texto de resposta | Obrigatório. Máximo de 10 respostas com um máximo de 256 caracteres para cada resposta. |
Códigos de erro
Erro (Estado HTTP → 4xx)
Configuração de canal
Passo 1: Clique em Definições > Canais
Passo 2: Localizar Canal Personalizado > clicar em Gerir

Passo 3: Na página Configuração de canal personalizado verá as seguintes definições:
Ícone do canal - Carregue uma imagem que sirva de ícone para o seu canal personalizado.
Nome do canal - O nome do canal pode ser alterado e é utilizado internamente para identificar o canal.
URL do webhook para mensagens de saída — O URL do webhook para mensagens de saída para este canal.
URL do webhook para mensagens recebidas — O URL do webhook para mensagens recebidas neste canal.
Tipo de ID — São utilizados para a identificação do utilizador e para comunicar com o seu servidor de integração personalizado.
ID do canal — ID de canal exclusivo para identificar o seu canal personalizado.
API Token — Um identificador único utilizado para autenticar um utilizador para aceder a uma API.

Passo 4: Clique em Guardar alterações para atualizar a configuração do canal personalizado.
Perguntas Frequentes e Resolução de Problemas
Posso conectar chats de outras plataformas usando um Canal Personalizado?
Sim, você pode. Aqui estão três passos a seguir:
No respond.io, insira a URL do webhook de destino da outra plataforma no campo URL do Webhook para Mensagem de Entrada.
Na outra plataforma, configure uma URL do webhook apontando para o respond.io, permitindo que os Contatos enviem mensagens de volta para você.
Você precisará de um Servidor de Integração Personalizada para interpretar APIs tanto do respond.io quanto da outra plataforma, permitindo a troca de mensagens entre eles.
Certifique-se de confirmar com a outra plataforma que os dois primeiros passos são viáveis.
Perguntas Frequentes sobre Webhooks de Canal Personalizado
Por que o webhook retorna um status 200 mesmo que a mensagem falhe ao ser entregue ao respond.io?
Ao conectar um Canal Personalizado, as mensagens enviadas para o respond.io através de webhooks sempre retornarão um código de status 200 imediatamente, independentemente de a mensagem ter sido passada com sucesso para o respond.io. Isso se deve à natureza dos webhooks, que são projetados para retornar uma resposta imediata sem verificar o sucesso da entrega da mensagem.

