Chat no aplicativo

Suporte no seu aplicativo, sem SDK

Uma URL em uma WebView. Nenhum pacote para instalar, nenhuma compilação para quebrar, e cada conversa chega à mesma caixa de entrada do restante do seu suporte.

01 · O que é
A resposta curta

O chat no aplicativo do inrelay é uma página de chat hospedada no seu próprio endereço da central de ajuda. Aponte uma WebView para /chat e seu aplicativo iOS, Android ou React Native terá chat ao vivo, respostas da IA e seus artigos de ajuda integrados — sem SDK, sem dependência e sem precisar lançar uma nova versão na loja de aplicativos para alterar nada.

A página é o mesmo chat que os visitantes do seu site usam, exibida em tela cheia em vez de um balão. Isso significa que ela herda tudo o que você já configurou: sua marca e cor de destaque, seu horário de atendimento, o chatbot de IA e seu conhecimento, o formulário de leads e a caixa de entrada em que sua equipe já trabalha. Ativá-la não é um grande projeto — o endereço passa a existir assim que o chat ao vivo for ativado.

Está incluído em todos os planos. Não há complemento para dispositivos móveis, não há taxa por conversa e não há nada para comprar antes de testar.

Looping animation: one hosted address, help.acme.com/chat, fans out into a chat bubble on a website and a full-screen chat inside an app, and ends marked already live.
02 · Seu endereço

Uma URL, três detalhes opcionais

Sua página de chat fica em /chat no seu endereço da central de ajuda — o domínio personalizado, se tiver conectado um, ou o endereço .inrelay.support que você resgatou. Você encontrará a URL exata, pronta para copiar, em Configurações → Widget de ajuda → No seu aplicativo móvel.

https://support.yourbrand.com/chat

Essa URL por si só é uma integração completa: o visitante pode conversar de forma anônima, e a conversa o acompanha ao abrir o aplicativo naquele dispositivo. Se o seu aplicativo sabe quem é o usuário, você pode informar isso com três parâmetros de consulta — todos opcionais, todos seguros para omitir:

  • token_id — seu próprio identificador aleatório e opaco para este usuário. É ele que restaura a conversa em um novo dispositivo ou após uma reinstalação.
  • email — para que uma resposta chegue até eles quando o aplicativo estiver fechado.
  • name — para que sua equipe saiba quem está atendendo.
https://support.yourbrand.com/chat?token_id=8f2c…&email=ada%40example.com&name=Ada%20Lovelace

Codifique os valores para URL. A menos que ative a identidade verificada (abaixo), trate token_id como um segredo: quem o possuir poderá retomar essa conversa. Portanto, gere valores aleatórios longos — nunca um endereço de e-mail, um nome de usuário ou um ID sequencial.

03 · As receitas

Três maneiras de abrir

Cada uma destas opções é a integração completa. As duas configurações que importam em todas as plataformas são JavaScript e DOM storage — o DOM storage é o que mantém a conversa do visitante ao abrir o aplicativo novamente.

iOS — WKWebView

import UIKit
import WebKit

final class SupportViewController: UIViewController {
  private let webView = WKWebView(frame: .zero, configuration: WKWebViewConfiguration())

  override func viewDidLoad() {
    super.viewDidLoad()
    webView.frame = view.bounds
    webView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
    webView.scrollView.bounces = false
    view.addSubview(webView)

    var url = URLComponents(string: "https://support.yourbrand.com/chat")!
    url.queryItems = [
      URLQueryItem(name: "token_id", value: user.supportToken),
      URLQueryItem(name: "email", value: user.email),
      URLQueryItem(name: "name", value: user.fullName)
    ]
    webView.load(URLRequest(url: url.url!))
  }
}

Android — WebView

class SupportActivity : AppCompatActivity() {
  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    val webView = WebView(this)
    setContentView(webView)

    webView.settings.javaScriptEnabled = true
    webView.settings.domStorageEnabled = true   // keeps the conversation across launches
    webView.webViewClient = WebViewClient()     // keep navigation inside the WebView

    val url = Uri.parse("https://support.yourbrand.com/chat")
      .buildUpon()
      .appendQueryParameter("token_id", user.supportToken)
      .appendQueryParameter("email", user.email)
      .appendQueryParameter("name", user.fullName)
      .build()
    webView.loadUrl(url.toString())
  }
}

React Native — react-native-webview

import { SafeAreaView } from 'react-native'
import { WebView } from 'react-native-webview'

const params = new URLSearchParams({
  token_id: user.supportToken,
  email: user.email,
  name: user.fullName
})

export function SupportScreen() {
  return (
    <SafeAreaView style={{ flex: 1 }}>
      <WebView
        source={{ uri: `https://support.yourbrand.com/chat?${params}` }}
        javaScriptEnabled
        domStorageEnabled
        originWhitelist={['https://support.yourbrand.com/*']}
      />
    </SafeAreaView>
  )
}

Dê à WebView a tela inteira e deixe que ela gerencie a própria rolagem — a página já tem o tamanho ajustado para celular, incluindo a área de segurança na parte inferior.

Restrinja a lista de permissões ao seu próprio endereço, com a barra no final. Um padrão como https://* permite que qualquer site seja renderizado dentro da sua tela de suporte, e um sem a barra — https://support.yourbrand.com* — também é compatível com support.yourbrand.com.example.net. Se você também verificar a URL por conta própria, compare a origem analisada em vez de testar um prefixo.

04 · Identidade verificada

Prove que são realmente eles

Opcional, desativado por padrão, e um botão de alternância em vez de uma migração: cada espaço de trabalho já possui um segredo de assinatura aguardando em Configurações → Widget de ajuda.

The In your mobile app settings block with the verification toggle

Com a verificação ativada, os detalhes passados pelo seu aplicativo devem chegar com uma assinatura gerada pelo seu servidor. Qualquer item não assinado — ou assinado para um usuário diferente — é ignorado: o chat ainda abre, mas de forma anônima. Ele nunca falha completamente, pois uma tela de suporte que não carrega é pior do que uma que não sabe seu nome.

Assine exatamente esta string, unindo os três valores com quebras de linha e usando uma string vazia para qualquer item omitido:

token_id + "\n" + email + "\n" + name
// on your server, never in the app binary
import { createHmac } from 'node:crypto'

const payload = [tokenId, email ?? '', name ?? ''].join('\n')
const signature = createHmac('sha256', INRELAY_EMBED_SECRET)
  .update(payload)
  .digest('hex')

Anexe como &signature=…. Assine os valores exatamente como você os coloca na URL — sem remover espaços, sem converter para minúsculas — e assine todos os três: uma assinatura que cobre apenas o token não validará uma solicitação cujo e-mail seja diferente. Valores contendo quebras de linha são recusados.

  • O segredo fica no seu servidor e é lido pelo nosso. Ele nunca deve estar no binário do aplicativo, onde qualquer pessoa poderia extraí-lo.
  • Busque a assinatura no seu próprio endpoint autenticado quando o usuário abrir o suporte e, em seguida, monte a URL.
  • Ative a verificação antes de lançar, se pretender usá-la. Adaptá-la depois que seus usuários já estiverem conversando significa reemitir todos os tokens.
05 · Quando o aplicativo estiver fechado

As respostas chegam por e-mail

Alguém faz uma pergunta, fecha o aplicativo e sua equipe responde dez minutos depois. A resposta é enviada por e-mail para o endereço da conversa — a partir dos parâmetros de identidade do aplicativo, ou do e-mail solicitado pelo chat — e, quando o suporte for aberto novamente, todo o histórico continuará lá.

Sendo diretos sobre como funciona: não há notificações push no aplicativo nesta versão. Não há SDK para registrar um token de dispositivo, portanto uma resposta não pode atualizar o selo do seu aplicativo. O e-mail é a via de entrega, e um cliente que deixou um endereço sempre recebe uma resposta.

  • A conversa permanece no dispositivo e segue um token_id para um novo dispositivo.
  • Tudo o que o visitante vê é o chat fornecido: respostas da IA, seus artigos de ajuda, seu horário de atendimento.
  • Notificações push no aplicativo não fazem parte desta versão — as respostas chegam por e-mail enquanto o aplicativo estiver fechado.
  • Uma interface de chat nativa e SDKs de plataforma não são fornecidos. Trata-se de uma página hospedada em uma WebView, intencionalmente.
06 · Configuração

No ar em quatro etapas

Ative o chat ao vivo

Configurações → Widget de ajuda. Se o widget do seu site já realiza conversas, esta etapa está concluída.

Copie a URL do seu chat

O bloco “No seu aplicativo móvel” traz isso, com um botão de cópia. Garanta primeiro um endereço da central de ajuda se quiser um personalizado.

Abra em uma WebView

Cole uma das receitas acima na sua tela de suporte. Ative o JavaScript e o armazenamento DOM.

Adicione identificação, se desejar

Passe um token, e-mail e nome — e ative a verificação com assinatura quando estiver tudo pronto.

07 · Recursos relacionados

O restante da caixa de entrada.

O chat no aplicativo é uma porta de entrada para a família de recursos do inrelay — estes são os principais em que ele se apoia.

Comece hoje

Seu aplicativo, com suporte integrado.

Gratuito para começar com sua própria caixa de entrada — todos os recursos, sem cartão, nunca por usuário.

Perguntas respondidas.

Preciso adicionar uma dependência ao meu aplicativo?
Não. Não há pacote do inrelay para iOS, Android, React Native ou Flutter — você abre uma URL no WebView que sua plataforma já oferece. Nada para atualizar e nenhuma versão nossa para manter sincronizada com a sua.
O que acontece se eu não passar nenhum parâmetro?
O chat funciona. O visitante é anônimo, a conversa permanece salva naquele dispositivo e o próprio chat pede um e-mail se o formulário de leads estiver ativado — assim a resposta ainda pode chegar até ele.
Outra pessoa pode ler uma conversa se adivinhar um token?
Com a verificação desativada, qualquer pessoa que tenha um token_id válido pode retomar a conversa — é por isso que os tokens devem ser longos e aleatórios, e por isso existe a opção de verificação. Com ela ativada, um token sem assinatura é totalmente ignorado.
O cliente recebe uma notificação push quando respondemos?
Nesta versão não. As respostas chegam por e-mail enquanto o aplicativo está fechado, e a conversa estará esperando quando abrirem o suporte novamente. Notificações push no aplicativo exigiriam um SDK, algo que essa abordagem evita de propósito.
O chat no aplicativo está incluído em todos os planos?
Sim. É o mesmo chat ao vivo que você já tem, exibido como uma página — não há adicional para dispositivos móveis nem taxa por conversa.

Comece a dominar suas DMs.

Dê respostas mais rápidas aos seus clientes e as noites de volta para sua equipe.

Desktop e celular. Grátis para uso individual.