Repull transmet chaque message de voyageur à ton modèle, avec le fil et la réservation associés, et renvoie la réponse sur Airbnb, Booking.com ou Vrbo. Tu apportes l'intelligence ; on gère les canaux.
Ce que ton produit obtient
Ton modèle décide quoi dire. Repull lui transmet le message et porte la réponse au voyageur.
Un webhook signé pour chaque nouveau message, avec l'id du fil, le canal, la réservation et le texte.
L'historique du fil, la réservation avec ses dates, ses voyageurs et ses conditions de séjour, et l'annonce : un appel chacun.
Quand un canal réécrit un message (Airbnb supprime les liens et les numéros de téléphone), la réponse t'indique exactement ce que le voyageur a reçu.
Comment ça marche
Abonne-toi aux messages des voyageurs, récupère le contexte, laisse ton modèle rédiger la réponse et envoie-la. Utilise l'id de l'événement comme clé d'idempotence pour qu'un webhook relancé n'envoie jamais deux fois.
reservation.message.received arrive signé, avec threadId et reservationId.
Récupère l'historique du fil et la réservation. Ajoute ta propre base de connaissances.
Fais un POST de la réponse. Repull la livre sur le canal du voyageur et l'enregistre dans le fil.
// api(): fetch on api.repull.dev with your API key
// Subscribed to reservation.message.received
export async function POST(req: Request) {
const event = await req.json() // verify X-Repull-Signature first
if (event.event !== 'reservation.message.received') return new Response(null)
const { threadId, reservationId, body } = event.data
// Context: the thread so far and the booking it belongs to
const history = await api(`/v1/conversations/${threadId}/messages?order=asc`)
const booking = reservationId ? await api(`/v1/reservations/${reservationId}`) : null
const reply = await yourModel.answer({ question: body, history, booking })
const sent = await api(`/v1/conversations/${threadId}/messages`, {
method: 'POST',
headers: { 'Idempotency-Key': event.eventId },
body: JSON.stringify({ message: reply }),
})
// Airbnb strips links and phone numbers — check what the guest actually got
if (sent.contentRewritten) log('delivered as', sent.deliveredContent)
return new Response(null)
}Couverture par canal
La couverture est vérifiée sur l'API en production. Couverture complète des canaux et des PMS
À côté de n'importe quel PMS
Sur Airbnb et Vrbo, Repull se connecte avec un accès limité à la messagerie. Le PMS de l'hôte continue de gérer les annonces et les calendriers, et ton produit ne lui dispute jamais le contrôle.
En bêta : réservations, messages et avis de Booking.com, sans que l'hôte retire son fournisseur de connectivité à son PMS.
Les mêmes endpoints et les mêmes événements webhook, que le voyageur ait réservé sur Airbnb, Booking.com ou Vrbo. Tu le construis une fois.
L'API derrière
reservation.message.receivedWebhook : un nouveau message de voyageur, avec le fil, la réservation et le canal.
GET /v1/conversations/{id}/messagesLa conversation jusqu'ici, comme contexte.
GET /v1/reservations/{id}Dates, voyageurs, conditions de séjour et statut.
POST /v1/conversations/{id}/messagesEnvoie la réponse, de façon idempotente.
POST /v1/reviews/{id}/replyLaisse le même assistant répondre aux avis, là où le canal autorise les réponses.
Serveur MCP et fournisseur AI SDKDonne Repull à un agent sous forme d'outils au lieu d'écrire les appels toi-même.
Gratuit pour commencer. Branche un webhook et réponds à ton premier voyageur aujourd'hui.