Para empresas de software

Cada conversa com hóspedes,
dentro do teu produto.

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

Uma caixa de entrada completa, não um feed de notificações.

Conversas, histórico, respostas e anexos de todos os canais, normalizados num único formato.

Uma única lista de conversas

Conversas de todos os canais ligados numa lista paginada, filtrável por canal e por conta.

Respostas que saem pelo canal certo

Envia uma vez. A mensagem é entregue no canal a partir do qual o hóspede escreveu e fica registada na conversa.

Entrega em tempo real

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

Uma caixa de entrada em três chamadas e um webhook.

Lista as conversas, lê uma, responde. Subscreve os eventos de mensagens para que as novas apareçam assim que chegam.

  1. 1

    Liga o anfitrião

    O anfitrião liga o Airbnb, o Booking.com ou o Vrbo através do Repull Connect. O PMS continua ligado tal como está.

  2. 2

    Carrega as conversas

    GET /v1/conversations devolve todas as conversas; o endpoint de mensagens devolve o histórico.

  3. 3

    Responde e escuta

    Faz POST de uma mensagem para responder e trata reservation.message.received para manter a caixa de entrada atualizada.

inbox.ts · ts
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.' }),
})
webhook.ts · ts
// 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

O que funciona onde

AirbnbConversas, envio, edição e anulação de envio, marcar como lida. Pré-aprovações e ofertas especiais exigem acesso total, que o Airbnb não permite ao lado de outro PMS.
Booking.comConversas, envio, anexos.
VrboConversas, envio de texto. Pré-aprovação de pedidos e edição do orçamento.
PMS do anfitriãoMensagens de hóspedes de todos os canais geridos pelo PMS, reservas diretas incluídas, para os PMS a que nos ligamos. As respostas voltam pelo PMS quando a API dele o permite.

A cobertura é verificada na API em produção. Cobertura completa de canais e PMS

Ao lado de qualquer PMS

Os teus clientes mantêm as ferramentas que já usam.

O PMS continua a gerir o anúncio

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.

Booking.com com o acesso à extranet do anfitrião

Em beta: reservas, mensagens e avaliações do Booking.com, sem o anfitrião ter de retirar o fornecedor de conectividade do seu PMS.

Uma integração, todos os canais

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.

Como a Repull funciona ao lado de um PMS→

A API por trás

Endpoints e eventos

GET /v1/conversations

Todas as conversas de todos os canais, paginadas por cursor.

GET /v1/conversations/{id}/messages

O histórico de uma conversa, da mais recente ou da mais antiga.

POST /v1/conversations/{id}/messages

Responde ao hóspede no canal dele, com chaves de idempotência.

POST /v1/conversations/{id}/pre-approval

Pré-aprova um pedido: Vrbo, ou Airbnb com acesso total.

reservation.message.received

Webhook: um hóspede enviou uma mensagem.

reservation.message.sent

Webhook: o anfitrião respondeu, incluindo a partir da app do canal.

Lança a caixa de entrada que os teus clientes estão sempre a pedir.

Começa grátis. Liga uma conta de teste e recebe mensagens ainda hoje.