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.
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.
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/chatEssa 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%20LovelaceCodifique 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.
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.
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!))
}
}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())
}
}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.
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.

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.
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.
token_id para um novo dispositivo.Configurações → Widget de ajuda. Se o widget do seu site já realiza conversas, esta etapa está concluída.
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.
Cole uma das receitas acima na sua tela de suporte. Ative o JavaScript e o armazenamento DOM.
Passe um token, e-mail e nome — e ative a verificação com assinatura quando estiver tudo pronto.
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.
O widget do seu site e o seu aplicativo abrem as mesmas conversas, na mesma caixa de entrada.
Ver chat ao vivo → BASE DE CONHECIMENTOSeus artigos de ajuda podem ser pesquisados dentro do aplicativo e servem de base para as respostas da IA.
Ver a base de conhecimento → APLICATIVO MÓVELO aplicativo auxiliar do inrelay para iOS e Android, para responder de onde estiver.
Ver o aplicativo móvel →Gratuito para começar com sua própria caixa de entrada — todos os recursos, sem cartão, nunca por usuário.
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.Dê respostas mais rápidas aos seus clientes e as noites de volta para sua equipe.
Desktop e celular. Grátis para uso individual.