Un unico URL in una WebView. Nessun pacchetto da installare, nessun build che rischia di bloccarsi e ogni conversazione arriva nella stessa inbox di tutto il resto della tua assistenza.
La chat in-app in inrelay è una pagina chat ospitata al tuo indirizzo del centro assistenza. Punta una WebView su /chat e la tua app iOS, Android o React Native avrà la chat dal vivo, le risposte dell'IA e i tuoi articoli di assistenza al suo interno — senza SDK, senza dipendenze e senza dover rilasciare un aggiornamento negli app store per applicare modifiche.
La pagina mostra la stessa chat usata dai visitatori del tuo sito, a schermo intero anziché in una bolla. Questo significa che eredita tutto ciò che hai già configurato: il tuo brand, i tuoi colori, gli orari di apertura, il chatbot IA con le sue informazioni, il modulo di contatto e la casella di posta su cui lavora già il tuo team. Attivarla non richiede un progetto lungo — l'indirizzo esiste non appena la live chat è attiva.
È incluso in ogni piano. Non esiste un add-on per il mobile, né costi per conversazione o acquisti preliminari per poterlo provare.
La tua pagina di chat si trova su /chat al tuo indirizzo del centro assistenza — il dominio personalizzato se ne hai collegato uno, altrimenti l'indirizzo .inrelay.support che hai richiesto. Troverai l'URL esatto, pronto da copiare, in Impostazioni → Widget di assistenza → Nella tua app mobile.
https://support.yourbrand.com/chatQuel semplice URL costituisce un'integrazione completa: un visitatore può chattare in modo anonimo e la conversazione lo segue ad ogni avvio dell'app su quel dispositivo. Se la tua app conosce l'identità dell'utente, puoi trasmetterla tramite tre parametri di query — tutti opzionali e tralasciabili in sicurezza:
token_id — il tuo identificatore casuale opaco per questo utente. Serve a ripristinare la conversazione su un nuovo dispositivo o dopo una reinstallazione.email — così le risposte possono raggiungerli quando l'app è chiusa.name — così il tuo team sa chi sta aiutando.https://support.yourbrand.com/chat?token_id=8f2c…&email=ada%40example.com&name=Ada%20LovelaceApplica la codifica URL ai valori. A meno che tu non attivi l'identità verificata (sotto), tratta token_id come un segreto: chiunque ne sia in possesso può riprendere quella conversazione, quindi genera valori casuali lunghi — mai un indirizzo email, un nome utente o un ID sequenziale.
Ciascuna di queste opzioni rappresenta l'intera integrazione. Le due impostazioni fondamentali su ogni piattaforma sono JavaScript e il DOM storage — quest'ultimo è ciò che conserva la conversazione del visitatore tra un avvio e l'altro dell'app.
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>
)
}Concedi alla WebView l'intero schermo e lascia che gestisca lo scorrimento — la pagina è già dimensionata per smartphone, inclusa l'area di sicurezza in basso.
Fissa la lista dei domini consentiti al tuo indirizzo, includendo lo slash finale. Un pattern come https://* consente a qualsiasi sito di integrarsi nella schermata di assistenza, mentre uno senza slash — https://support.yourbrand.com* — corrisponde anche a support.yourbrand.com.example.net. Se verifichi l'URL autonomamente, confronta l'origine analizzata anziché controllare solo il prefisso.
Opzionale, disattivata di default e gestita con un semplice interruttore: ogni workspace ha già un segreto di firma pronto in Impostazioni → Widget di assistenza.

Con la verifica attiva, i dettagli trasmessi dall'app devono arrivare con una firma generata dal tuo server. Tutto ciò che non è firmato — o firmato per un utente diverso — viene ignorato: la chat si apre comunque, semplicemente in modo anonimo. Non si blocca mai, perché una schermata di assistenza che non si carica è peggio di una che non conosce il tuo nome.
Firma esattamente questa stringa, unendo i tre valori con interruzioni di riga e usando una stringa vuota per qualsiasi elemento omesso:
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')Aggiungilo come &signature=…. Firma i valori esattamente come li inserisci nell'URL — senza rimuovere spazi o convertire in minuscolo — e firmali tutti e tre: una firma che copre solo il token non convaliderà una richiesta con un'email diversa. I valori che contengono interruzioni di riga verranno rifiutati.
Un utente fa una domanda, chiude l'app e il tuo team risponde dieci minuti dopo. La risposta viene inviata via email all'indirizzo associato alla conversazione — dai parametri di identità dell'app o dall'email richiesta nella chat — e quando apre di nuovo l'assistenza, l'intera conversazione è ancora lì.
Parlando chiaro: non ci sono notifiche push in-app in questa versione. Non c'è alcun SDK con cui registrare un token del dispositivo, quindi una risposta non può aggiornare il badge dell'app. L'email è il canale di consegna, e un cliente che ha lasciato un indirizzo riceverà sempre una risposta.
token_id su un nuovo dispositivo.Impostazioni → Widget di assistenza. Se il widget del tuo sito web offre già la chat, questo passaggio è fatto.
Lo trovi nel blocco “Nella tua app mobile”, completo di pulsante di copia. Reclama prima un indirizzo del centro assistenza se ne vuoi uno personalizzato con il tuo brand.
Incolla uno dei codici qui sopra nella tua schermata di supporto. Abilita JavaScript e lo storage DOM.
Passa un token, e-mail e nome — e attiva la verifica con la firma quando sei pronto.
La chat in-app è una delle porte d'accesso alle funzionalità di inrelay — queste sono quelle su cui si appoggia.
Il widget del tuo sito web e la tua app aprono le stesse conversazioni, nella stessa inbox.
Scopri la live chat → KNOWLEDGE BASEI tuoi articoli di supporto sono consultabili nell'app e guidano le risposte dell'IA.
Vedi il centro assistenza → APP MOBILEL'app mobile inrelay per iOS e Android, per rispondere anche fuori ufficio.
Scopri l'app mobile →Inizia gratis con la tua inbox — tutte le funzionalità, nessuna carta di credito, mai a utente.
token_id valido può riprendere quella conversazione — motivo per cui i token devono essere lunghi e casuali, ed è per questo che esiste l'opzione di verifica. Con la verifica attiva, un token non firmato viene del tutto ignorato.Offri risposte più rapide ai clienti e restituisci le serate al tuo team.
Desktop e mobile. Gratis per i singoli.