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:
Cliente entra em contato por qualquer canal que esteja integrado a loja; (Cliente envia mensagem);
Bot recebe a mensagem, entra no primeiro estado e envia a mensagem com a estrutura de escolhas para o cliente;
Cliente responde com uma resposta válida;
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;
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

