Lê e responde a mensagens de hóspedes do Airbnb, Booking.com e Vrbo com uma só API. Os teus clientes mantêm o PMS; o teu produto fica com a caixa de entrada.
O que o teu produto ganha
Conversas, histórico, respostas e anexos de todos os canais, normalizados num único formato.
Conversas de todos os canais ligados numa lista paginada, filtrável por canal e por conta.
Envia uma vez. A mensagem é entregue no canal a partir do qual o hóspede escreveu e fica registada na conversa.
Os webhooks disparam a cada nova mensagem de um hóspede e a cada resposta que o anfitrião envia a partir da app do canal, para que a tua caixa de entrada nunca fique desatualizada.
Como funciona
Lista as conversas, lê uma, responde. Subscreve os eventos de mensagens para que as novas apareçam assim que chegam.
O anfitrião liga o Airbnb, o Booking.com ou o Vrbo através do Repull Connect. O PMS continua ligado tal como está.
GET /v1/conversations devolve todas as conversas; o endpoint de mensagens devolve o histórico.
Faz POST de uma mensagem para responder e trata reservation.message.received para manter a caixa de entrada atualizada.
const api = (path: string, init?: RequestInit) =>
fetch(`https://api.repull.dev${path}`, {
...init,
headers: {
Authorization: `Bearer ${process.env.REPULL_API_KEY}`,
'Content-Type': 'application/json',
},
}).then(r => r.json())
// Every thread, from every channel, in one list
const { data: threads } = await api('/v1/conversations?limit=50')
// One thread's history, oldest first
const { data: messages } = await api(`/v1/conversations/${threads[0].id}/messages?order=asc`)
// Reply — it goes out on the channel the guest wrote from
await api(`/v1/conversations/${threads[0].id}/messages`, {
method: 'POST',
body: JSON.stringify({ message: 'Hi Alex, check-in is from 4pm.' }),
})// POST /webhooks/repull — 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') {
const { threadId, channel, senderName, body } = event.data
await inbox.push({ threadId, channel, from: senderName, body })
}
return new Response(null, { status: 200 })
}Cobertura por canal
A cobertura é verificada na API em produção. Cobertura completa de canais e PMS
Ao lado de qualquer PMS
No Airbnb e no Vrbo, a Repull liga-se com acesso apenas de mensagens. O PMS do anfitrião continua a gerir anúncios e calendários, e o teu produto nunca lhe disputa o controlo.
Em beta: reservas, mensagens e avaliações do Booking.com, sem o anfitrião ter de retirar o fornecedor de conectividade do seu PMS.
Os mesmos endpoints e os mesmos eventos de webhook, quer o hóspede tenha reservado no Airbnb, no Booking.com ou no Vrbo. Constróis uma vez.
A API por trás
GET /v1/conversationsTodas as conversas de todos os canais, paginadas por cursor.
GET /v1/conversations/{id}/messagesO histórico de uma conversa, da mais recente ou da mais antiga.
POST /v1/conversations/{id}/messagesResponde ao hóspede no canal dele, com chaves de idempotência.
POST /v1/conversations/{id}/pre-approvalPré-aprova um pedido: Vrbo, ou Airbnb com acesso total.
reservation.message.receivedWebhook: um hóspede enviou uma mensagem.
reservation.message.sentWebhook: o anfitrião respondeu, incluindo a partir da app do canal.
Começa grátis. Liga uma conta de teste e recebe mensagens ainda hoje.