Chat in-app

Supporto nella tua app, senza SDK

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.

01 · Che cos'è
In breve

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.

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 · Il tuo indirizzo

Un solo URL, tre dettagli opzionali

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/chat

Quel 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%20Lovelace

Applica 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.

03 · Le soluzioni

Tre modi per aprirlo

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.

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>
  )
}

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.

04 · Identità verificata

Dimostra che sono proprio loro

Opzionale, disattivata di default e gestita con un semplice interruttore: ogni workspace ha già un segreto di firma pronto in Impostazioni → Widget di assistenza.

The In your mobile app settings block with the verification toggle

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.

  • Il segreto risiede sul tuo server e viene letto dal nostro. Non deve mai trovarsi nel binario dell'app, dove chiunque potrebbe estrarlo.
  • Recupera la firma dal tuo endpoint autenticato quando l'utente apre l'assistenza, quindi costruisci l'URL.
  • Attiva la verifica prima del rilascio, se intendi usarla. Aggiungerla a posteriori quando gli utenti stanno già chattando significa dover riemettere ogni token.
05 · Quando l'app è chiusa

Le risposte arrivano via email

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.

  • La conversazione rimane sul dispositivo e segue un token_id su un nuovo dispositivo.
  • Tutto ciò che il visitatore vede è la chat integrata: risposte dell'IA, i tuoi articoli della guida, i tuoi orari di apertura.
  • Le notifiche push in-app non fanno parte di questa versione — le risposte arrivano via email quando l'app è chiusa.
  • Non offriamo un'interfaccia chat nativa né SDK specifici per piattaforma. Si tratta volutamente di una pagina ospitata all'interno di una WebView.
06 · Configurazione

Attivo in quattro passaggi

Attiva la chat dal vivo

Impostazioni → Widget di assistenza. Se il widget del tuo sito web offre già la chat, questo passaggio è fatto.

Copia l'URL della tua chat

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.

Aprilo in una WebView

Incolla uno dei codici qui sopra nella tua schermata di supporto. Abilita JavaScript e lo storage DOM.

Aggiungi l'identità, se vuoi

Passa un token, e-mail e nome — e attiva la verifica con la firma quando sei pronto.

07 · Strumenti simili

Il resto dell'inbox.

La chat in-app è una delle porte d'accesso alle funzionalità di inrelay — queste sono quelle su cui si appoggia.

Inizia oggi

La tua app, con l'assistenza integrata.

Inizia gratis con la tua inbox — tutte le funzionalità, nessuna carta di credito, mai a utente.

Domande e risposte.

Devo aggiungere una dipendenza alla mia app?
No. Non esiste un pacchetto inrelay per iOS, Android, React Native o Flutter — apri semplicemente un URL nella WebView già fornita dalla tua piattaforma. Niente da aggiornare e nessuna versione nostra da sincronizzare con la tua.
Cosa succede se non passo alcun parametro?
La chat funziona comunque. Il visitatore è anonimo, la conversazione rimane memorizzata su quel dispositivo e la chat stessa chiede un'e-mail se il modulo di contatto è attivo — così la risposta può comunque raggiungerlo.
Qualcun altro può leggere una conversazione se indovina un token?
Con la verifica disattivata, chiunque disponga di un 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.
Il cliente riceve una notifica push quando rispondiamo?
Non in questa versione. Le risposte arrivano via e-mail mentre l'app è chiusa, e la conversazione è pronta quando riaprono l'assistenza. Le notifiche push in-app richiederebbero un SDK, esattamente ciò che questo approccio evita deliberatamente.
La chat in-app è inclusa in tutti i piani?
Sì. È la stessa live chat che hai già, fornita come pagina web — nessun modulo aggiuntivo per dispositivi mobili e nessun costo per conversazione.

Inizia a gestire i tuoi DM.

Offri risposte più rapide ai clienti e restituisci le serate al tuo team.

Desktop e mobile. Gratis per i singoli.