Introdução

A API Remota do Bot foi desenvolvida para que o cliente possa configurar a árvore de decisões do Bot conforme desejar, para que o Bot dê informações para o usuário através de perguntas e respostas e realizar encaminhamentos de mensagens. 

Implementação

A API remota se comporta como descrito abaixo:

  1.  Cliente entra em contato por qualquer canal que esteja integrado a loja; (Cliente envia mensagem);

  2. Bot recebe a mensagem, entra no primeiro estado e envia a mensagem com a estrutura de escolhas para o cliente;

  3. Cliente responde com uma resposta válida;

  4. Bot avalia a resposta, sendo da opção REMOTE_API_HANDLER, este efetuará uma chamada para uma API externa aguardando os formatos descritos neste documento;

  5. Bot avalia a resposta da API, se estiver correta efetua:

a. Caso o handlerType retornado seja do tipo "SEND_TO_TEAM", o Bot irá executar a função de redirecionar o atendimento para o time;
b. Caso o handlerType retornado seja do tipo "BOT_STATE_CHANGE_HANDLER", será enviada nova estrutura decisória para o cliente escolher.
c. Caso ocorra algum problema na integração (código de erro HTTP, formato da mensagem inválida, timeout, etc), o atendimento será direcionado para o time configurado na opção "fallbackTeam".

1 - Estrutura que será enviada para a API externa

// Model (typescript format)
interface Chat {
  objectId: string; //id do canal (chat)
  customerId?: string //IDENTIFICADOR_UNICO_DO_CLIENTE
  phone?: string //NUMERO_DO_TELEFONE
  name?: string //"NOME_DO_CLIENTE(SE HOUVER)
  email?: string //"EMAIL_DO_CLIENTE(SE HOUVER),
  platform: string; //WHATSAPP, FBMESSENGER, WEBCHAT or WAB
  platformId?: string //No caso do WAB/WHATSAPP é o número chamado
}

interface BotRequest {
  chat: Chat
  handlerId: string //"NAME_OF_STATE
  customerSupportRequestId: string //"IDENTIFICADOR_ÚNICO_DO_ATENDIMENTO"
}

//Example
{
  "chat": {
    "objectId": "IDENTIFICADOR_DA_CONVERSA",
    "customerId": "IDENTIFICADOR_UNICO_DO_CLIENTE(SE JÁ EXISTIR)",
    "phone": "NUMERO_DO_TELEFONE(SE HOUVER)",
    "name": "NOME_DO_CLIENTE(SE HOUVER)",
    "email": "EMAIL_DO_CLIENTE(SE HOUVER)",
    "platform": "WHATSAPP",
    "platformId": "5541999999999"
  },
  "handlerId": "ID_ESTADO_SELECIONADO",
  "botStateId": "ID_ESTADO_ATUAL",
  "objectId": "IDENTIFICADOR_ÚNICO_DO_ATENDIMENTO"
}


2 - Estrutra retornada da API externa com estado SEND_TO_TEAM

interface BotState {
  title?: string;
  index?: number;
  toState?: ToBotState;
  handlerType: 'BOT_STATE_CHANGE_HANDLER' |'SEND_TO_TEAM';
  handlerConfig?: {
    teamId: string;
    routingMessage: string;
  }
}
//Example
{
  "handlerType": "SEND_TO_TEAM",
  "handlerConfig": {
    "teamId": "ID_DO_TIME",
    "routingMessage": "Você está sendo redirecionado para o time XYZ"
  }
}

3 - Estrutra retornada da API externa com estado BOT_STATE_CHANGE_HANDLER

interface BotState {
  handlerType: 'BOT_STATE_CHANGE_HANDLER' |'SEND_TO_TEAM' |'REMOTE_API_HANDLER';
  title?: string; // descritivo da opção apresentada para o cliente
  index?: number;// índice da opção apresentada para o cliente
  toState?: {//utilizado caso seja um agregador de opções
    title: string; // titulo do estado
    to: BotState[]; // opções do estado
  },
  handlerConfig?: { // para as opções SEND_TO_TEAM e REMOTE_API_HANDLER
    teamId?: string; // id do time de destino
    routingMessage?: string; // mensagem de roteamento
    handlerId?: string; // opção selecionada pelo cliente
    botStateId?: string; //estado atual do bot
    url?: string; //URL de destino
    fallbackTeam?: string;//id do time caso ocorra algum problema na integração
  }
}
//Example
{
  "handlerType": "BOT_STATE_CHANGE_HANDLER",
  "toState": {
    "title": "Para melhor atendê-lo, digite o número do setor em que deseja falar:",
    "to": [
      {
        "title": "Cursos",
        "handlerType": "SEND_TO_TEAM",
        "index": 1,
        "handlerConfig": {
          "teamId": "ID_DO_TIME",
          "routingMessage": "ROTEAMENTO DE NOVAS MENSAGENS\n\nVocê está sendo redirecionado para o setor Cursos.\n\n⏰ O nosso horário de atendimento neste canal é de segunda a sexta-feira das *08h00 às 17h00* horas ⏰"
        }
      },
      {
        "title": "Cursos Online",
        "handlerType": "REMOTE_API_HANDLER",
        "index": 2,
        "handlerConfig": {
          "botStateId": "QUESTAO_INICIAL",
          "handlerId": "ONLINE_COURSES",
          "url": "https://my.domain.com/url/to/service",
          "fallbackTeam": "ID_DO_TIME" //caso ocorra erro na integração
        }
      }
    ]
  }
}

Integração do BOT

API criada para testes (apenas para referência):

1 - Configuração inicial do Bot: 

{
  //configurações internas omitidas
  "greetingsMessage": "Bem-vindo a Loja",
  "defaultErrorMessage": "Ops, não entendi sua mensagem",
  "initialState": {
    "title": "nivel default",
    "handlerType": "REMOTE_API_HANDLER",
    "handlerConfig": {
      "botStateId": "FIRST_LEVEL",
      "url": "http://localhost:5000/myapi",
      "handlerId": "QUESTION_TREE",
      "fallbackTeam": "DJY9z2fXQl"
    }
  }
}


2 - Mensagem enviada para a API Remota:

{
  customerSupportRequestId: "RTas5Ht7D",
  handlerId: "QUESTION_TREE",
  botStateId: "FIRST_LEVEL",
  chat: {
      objectId: "Tg0G6dfG",
      name: "Marcelo",
      phone: "5541999999999",
      customerId: "Hk5g4cAq5",
      email: "email@email.com",
      platform: "WAB",
      platformId: "5541988888888",
  }
}


3 - Retorno da primeira chamada do Bot:

{
  botStateId: "QUESTION_TREE",
  handlerType: "BOT_STATE_CHANGE_HANDLER",
  index: 0,
  toState: {
    title: "Aqui estão as opções",
    to: [
      {
        handlerType: "REMOTE_API_HANDLER",
        title: "First",
        index: 1,
        handlerConfig: {
          botStateId: "QUESTION_TREE",
          handlerId: "MY_FIRST_OPTION",
          url: "http://localhost:5000/myapi",
          fallbackTeam: "DJY9z2fXQl"
        }
      },
      {
        handlerType: "REMOTE_API_HANDLER",
        title: "Second",
        index: 2,
        handlerConfig: {
          botStateId: "QUESTION_TREE",
          handlerId: "MY_SECOND_OPTION",
          url: "http://localhost:5000/myapi",
          fallbackTeam: "DJY9z2fXQl"
        }
      }
    ]
  }
}

Julgando que o cliente tenha digitado "1" como opção:
4 - Retorno da API remota caso seja selecionada a primeira opção no Bot:

{
  handlerType: "SEND_TO_TEAM",
  botStateId: "first",
  handlerConfig: {
    teamId: "4sOTCjq5HF",
    routingMessage: "Você está sendo redirecionado para o time CRM"
  }
}

Integrando com a API OmniChat e Webhooks

Além de criar seu próprio bot customizado, integrado aos seus sistemas internos, é possível carregar informações da OmnChat utilizando a API OmniChat e nossos Webhooks.

API OmniChat

É possível carregar várias informações da OmniChat para seus sistemas internos, como dados de ordens, times, usuários, chats, etc. Para verificar o que é possível fazer com nossa API, entre na documentação https://api-docs.omni.chat/.

Webhooks

Com nossos webhooks é possível receber notificações de alterações de objetos da OmniChat em seu sistema para efetuar rotinas diversas. Para mais detalhes sobre a utilização de Webhooks, veja a documentação http://help.omni.chat/pt-BR/articles/3102792-webhooks-omnichat

Encontrou sua resposta?