Eén URL in een WebView. Geen pakket om te installeren, geen build die kan breken, en elk gesprek komt in dezelfde inbox terecht als de rest van je support.
In-app chat in inrelay is een gehoste chatpagina op het adres van je eigen helpcentrum. Richt een WebView op /chat en je iOS-, Android- of React Native-app bevat livechat, AI-antwoorden en je kennisbankartikelen — zonder SDK, zonder afhankelijkheden en zonder dat er een app-store-release nodig is om iets te wijzigen.
De pagina is dezelfde chat die je websitebezoekers gebruiken, maar dan schermvullend getoond in plaats van in een bubbel. Dat betekent dat het alles overneemt wat je al hebt ingesteld: je merkstijl en accentkleur, je openingstijden, de AI-chatbot en de kennis daarvan, het leadformulier en de inbox waarin je team al werkt. Het inschakelen is geen project — het adres bestaat zodra livechat aan staat.
Het is inbegrepen in elk pakket. Er is geen mobiele add-on, geen kosten per gesprek en niets wat je moet kopen voordat je het kunt proberen.
Je chatpagina staat op /chat op het adres van je helpcentrum — het aangepaste domein als je er een hebt gekoppeld, anders het .inrelay.support-adres dat je hebt geclaimd. Je vindt de exacte URL, klaar om te kopiëren, in Instellingen → Helpwidget → In je mobiele app.
https://support.yourbrand.com/chatDie URL op zich is een volledige integratie: een bezoeker kan anoniem chatten, en het gesprek volgt hen wanneer de app opnieuw wordt geopend op dat apparaat. Als je app weet wie de gebruiker is, kun je dat doorgeven met drie queryparameters — allemaal optioneel, allemaal veilig om weg te laten:
token_id — je eigen ondoorzichtige, willekeurige id voor deze gebruiker. Dit is wat hun gesprek herstelt op een nieuw apparaat of na opnieuw installeren.email — zodat een antwoord hen kan bereiken wanneer de app gesloten is.name — zodat je team weet wie ze helpen.https://support.yourbrand.com/chat?token_id=8f2c…&email=ada%40example.com&name=Ada%20LovelaceCodeer de waarden voor de URL. Tenzij je geverifieerde identiteit inschakelt (hieronder), moet je token_id als een geheim behandelen: wie er een heeft, kan dat gesprek hervatten. Genereer dus lange willekeurige waarden — nooit een e-mailadres, gebruikersnaam of opeenvolgend ID.
Elk hiervan is de volledige integratie. De twee instellingen die op elk platform van belang zijn, zijn JavaScript en DOM-opslag — DOM-opslag zorgt ervoor dat het gesprek van een bezoeker bewaard blijft wanneer de app opnieuw wordt geopend.
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>
)
}Geef de WebView het volledige scherm en laat deze het scrollen zelf afhandelen — de pagina is al op formaat gemaakt voor een telefoon, inclusief de safe area aan de onderkant.
Koppel de allowlist aan je eigen adres, met de schuine streep aan het einde. Een patroon zoals https://* zorgt ervoor dat elke site in je supportscherm kan worden weergegeven, en een patroon zonder schuine streep — https://support.yourbrand.com* — komt ook overeen met support.yourbrand.com.example.net. Als je de URL zelf ook controleert, vergelijk dan de geparste herkomst in plaats van een voorvoegsel te testen.
Optioneel, standaard uitgeschakeld, en een schakelaar in plaats van een migratie: elke werkruimte heeft al een ondertekeningsgeheim klaarstaan in Instellingen → Helpwidget.

Met verificatie ingeschakeld moeten de gegevens die je app doorgeeft aankomen met een handtekening die door jouw server is gegenereerd. Alles wat niet ondertekend is — of ondertekend voor een andere gebruiker — wordt genegeerd: de chat opent nog steeds, maar is simpelweg anoniem. Het crasht nooit hard, want een supportscherm dat niet laadt, is erger dan een scherm dat je naam niet kent.
Onderteken exact deze tekenreeks, waarbij je de drie waarden samenvoegt met regeleinden en een lege tekenreeks gebruikt voor alles wat je weglaat:
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')Voeg het toe als &signature=…. Onderteken de waarden precies zoals je ze in de URL zet — geen spaties verwijderen, geen kleine letters van maken — en onderteken alle drie: een handtekening die alleen het token dekt, valideert geen verzoek waarvan het e-mailadres verschilt. Waarden met regeleinden worden geweigerd.
Iemand stelt een vraag, sluit je app, en je team antwoordt tien minuten later. Het antwoord wordt gemaild naar het adres van het gesprek — vanuit de identiteitsparameters van de app, of vanuit het e-mailadres dat in de chat is gevraagd — en wanneer ze support opnieuw openen, staat het hele gesprek er nog.
Laten we eerlijk zijn over de vorm: er zijn geen in-app pushmeldingen in deze versie. Er is geen SDK om een apparaattoken bij te registreren, dus een antwoord kan de badge van je app niet laten oplichten. E-mail is de bezorgroute, en een klant die een adres heeft achtergelaten hoort altijd iets terug.
token_id naar een nieuw apparaat.Instellingen → Helpwidget. Als je websitewidget al chat, ben je klaar met deze stap.
Het blok “In je mobiele app” bevat het, met een kopieerknop. Claim eerst een helpcenter-adres als je een eigen domein wilt.
Plak een van de bovenstaande recepten in je supportscherm. Schakel JavaScript en DOM-storage in.
Geef een token, e-mailadres en naam mee — en schakel verificatie met de handtekening in wanneer je er klaar voor bent.
In-app chat is één toegangspoort tot de functionaliteiten van inrelay — dit zijn de functies waar het op leunt.
Je websitewidget en je app openen dezelfde gesprekken, in dezelfde inbox.
Bekijk live chat → KENNISBANKJe helpartikelen zijn doorzoekbaar in de app en vormen de basis voor de antwoorden van de AI.
Bekijk de kennisbank → MOBIELE APPDe mobiele inrelay-app voor iOS en Android, om te antwoorden als je niet achter je bureau zit.
Bekijk de mobiele app →Gratis te starten met je eigen inbox — alle functies, geen creditcard nodig, nooit per gebruiker.
token_id dat gesprek hervatten — daarom moeten tokens lang en willekeurig zijn, en daarom bestaat de verificatieschakelaar. Als deze aan staat, wordt een niet-ondertekend token volledig genegeerd.Geef je klanten sneller antwoord en je team hun avonden terug.
Desktop en mobiel. Gratis voor solo.