Desarrolladores

Llama desde tu CRM

Pon un botón «Llamar» junto a cualquier número de teléfono en tu propia herramienta. Tu agente lo presiona y habla — por Rimay, en su extensión de Rimay. Dos enlaces: sin plugin, sin clave de API, sin trabajo de backend.

Necesitas: una cuenta de Rimay con extensiónFunciona en: cualquier herramienta donde puedas poner un enlaceTiempo: unos 10 minutos

Cómo funciona

La consola del agente es el teléfono: tiene el micrófono y mantiene la extensión registrada, así que se queda abierta en su propia pestaña. Tus botones de llamada le pasan el número a esa pestaña — nunca la recargan, así que una llamada en curso no se corta.

1

Abre Rimay una vez, en la mañana

Un enlace en algún lugar permanente de tu app: una barra de herramientas, el menú del usuario. El target lo mantiene en una sola pestaña, así que presionarlo de nuevo solo enfoca la que ya está abierta.

<a href="https://app.rimay.cc/agent" target="rimay-console" rel="noopener">
  Start Rimay
</a>
2

Un botón «Llamar» en cada número

Abrirlo con window.open importa: una ventana solo puede cerrarse sola si la abrió un script. Un enlace normal también funciona, solo que se queda abierta con un mensaje de «ya puedes cerrar esto».

<!-- Una vez por usuario: la consola es el teléfono, así que se queda abierta -->
<a href="https://app.rimay.cc/agent" target="rimay-console" rel="noopener">
  Start Rimay
</a>

<a
  href="https://app.rimay.cc/agent/dial?number=%2B593991234567"
  onclick="window.open(this.href, 'rimay-dial', 'width=420,height=320'); return false;"
>Call</a>

Arma el enlace

Pega un número como lo guarda tu CRM. Los ejemplos de arriba se actualizan mientras escribes.

https://app.rimay.cc/agent/dial?number=%2B593991234567

Listo para pegar. El + va codificado como %2B.

Qué ve tu agente

Cuando presiona LlamarQué pasa
Teléfono libreMarca de inmediato y la pestaña de la consola pasa al frente.
En llamada, cerrando o en pausaLa consola muestra «Llamada en espera» con el número y la marca apenas se desocupa. Puede cancelarla ahí mismo.
Consola cerradaLa ventanita se convierte en la consola y marca en cuanto la extensión se registra, así la primera llamada del día sale del mismo botón.
Sin sesión iniciadaCae en el inicio de sesión de Rimay y vuelve a la llamada después.

Formato del número

  • Dígitos, con un + opcional al inicio. Espacios, guiones, paréntesis y puntos se ignoran, así que +593 99 123 4567 y (02) 380-1234 funcionan igual.
  • Codifícalo para URL: el + se convierte en %2B. Todos los ejemplos de arriba ya lo hacen por ti.
  • Cualquier otra cosa se rechaza en vez de marcarse. El número llega en una URL, así que Rimay lo trata como dato no confiable.

Lo que conviene saber

  • Una sola pestaña de consola por persona. Dos pestañas abiertas registran la misma extensión y solo una recibe la llamada.
  • El botón inicia llamadas, no las reporta. Tu CRM todavía no se entera de cómo fue la llamada: eso llega con los webhooks y el endpoint de resultados de la API Enterprise.
  • La pestaña tiene que quedarse abierta, porque ahí viven el micrófono y el registro. El softphone integrado elimina eso.

Qué trae la llamada

Cualquier otro parámetro del enlace viaja con la llamada: el agente lo ve junto al número mientras timbra, y queda guardado con la llamada.

<a href="https://app.rimay.cc/agent/dial?number=%2B593991234567&deal=8821&tier=gold&owner=ana">Call</a>
  • Los nombres son tuyos. Rimay no interpreta «deal» ni «sla»; los muestra como los mandaste.
  • Hasta 8 pares por llamada; nombres de 1 a 32 caracteres (letras, números, guion y guion bajo); valores cortados a 200 caracteres.
  • Lo que no cumple se descarta en vez de rechazar la llamada: vale más marcar que perder la llamada por un campo raro del enlace.

La API

Todo lo que hace la consola, como HTTP. Cada operación es un POST a /v1/<nombre> con un cuerpo JSON, y la cuenta sale de la clave: ninguna petición nombra una.

  1. Crea una clave en la consola, en Agentes → Acceso de máquina. Elige el alcance más angosto que sirva.
  2. Envíala como Authorization: Bearer rk_live_…
  3. El documento OpenAPI está en /api/v1/openapi.json y no necesita clave: lo necesitas antes de tener una.
# Leer: las voces de la cuenta.
curl -s -X POST https://rimay.cc/api/v1/list_voices \
  -H "Authorization: Bearer $RIMAY_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

# Escribir: crear una extensión.
curl -s -X POST https://rimay.cc/api/v1/create_extension \
  -H "Authorization: Bearer $RIMAY_KEY" \
  -H "Content-Type: application/json" \
  -d '{"number":"9012","displayName":"Ventas 2","webrtc":true}'

# El documento OpenAPI, sin clave.
curl -s https://rimay.cc/api/v1/openapi.json

Cuando algo sale mal

Una sola forma de error, { error: { code, message } }, y códigos HTTP que dicen qué hacer:

400El cuerpo no cumple el esquema. El mensaje nombra el campo.
401Falta la clave, o ya no sirve.
403La clave es más angosta que la operación. Dice qué alcance hace falta.
402La prueba terminó o la suscripción no está activa. Pagar es lo que destraba.
429Se acabó el cupo diario de la cuenta. Mañana vuelve.
503La central no respondió. Se puede reintentar.

El servidor MCP

Las mismas operaciones como herramientas para Claude, Claude Code y Codex. Una clave y nada más: sin OAuth.

claude mcp add --transport http rimay https://rimay.cc/mcp \
  --header "Authorization: Bearer $RIMAY_KEY"

Una clave de solo lectura ve siete herramientas —inventario, extensiones registradas, wallboard, agentes, voces, plan y transcripción— y ninguna que escriba. Una herramienta que la clave no puede llamar no aparece en la lista, porque un modelo que ve una herramienta tarde o temprano la prueba.

Pégale esto a tu asistente

Si vas a integrar con la ayuda de un asistente de IA, esto le da todo el contexto de una vez: qué es Rimay, dónde está el OpenAPI, cómo se autentica y qué no debe hacer sin preguntarte.

Está en inglés a propósito: es lo que mejor interpretan los modelos, aunque tú y tu equipo trabajen en español.

You are helping me integrate with Rimay, an AI-native contact center that runs
on top of an Asterisk/Issabel PBX (extensions, queues, SIP trunks, outbound
campaigns, AI voice agents, cloned voices).

Two ways in, the same operations behind both:
- REST: POST https://rimay.cc/api/v1/<operation> with a JSON body.
  OpenAPI: https://rimay.cc/api/v1/openapi.json — no key needed. Read it before coding;
  it is generated from the server, so it is never out of date.
- MCP: https://rimay.cc/mcp (Streamable HTTP). To connect Claude Code:
  claude mcp add --transport http rimay https://rimay.cc/mcp --header "Authorization: Bearer $RIMAY_KEY"

Auth: one API key, sent as "Authorization: Bearer rk_live_...". An admin creates
it in the Rimay console under Agents -> Machine access. It is shown once. Keep it
server-side: never in a browser, never committed.

The account is implicit. A key belongs to exactly one tenant, so no request takes
an account or tenant id. If you think you need one, you are reading stale docs.

Scopes widen in this order, and a key holds exactly one:
- read: inventory, registered extensions, wallboard, agents, voices, plan
- write: create and update extensions, queues, campaigns, AI agents, voice accents
- destructive: every delete, SIP trunk changes, and start_ai_call

How I want you to work:
- Read before you write. Check the inventory or the wallboard first.
- Never call a destructive operation without telling me exactly what it will do
  and waiting for me to say yes. start_ai_call places a real phone call to a real
  person and spends voice minutes. Trunk changes affect a shared PBX.
- Errors come back as { "error": { "code", "message" } }:
  400 the body is wrong, and the message names the field.
  401 the key is missing or dead. 403 the key's scope is too narrow — ask me for a
  wider key, do not retry. 402 the account must pay. 429 the daily allowance is
  spent, so stop rather than loop. 503 the PBX did not answer; retry once, then
  tell me.
- Do not invent operation names. The OpenAPI document is the list.

One thing needs no API: to let a person call from our CRM, link to
https://app.rimay.cc/agent/dial?number=%2B593991234567 and add any other query
parameters as context (deal, owner, sla). The agent sees them beside the number
while the phone rings, and they are stored with the call. Up to 8 pairs, values
under 200 characters.

Lo que viene

Enterprise

Softphone integrado

Rimay dentro de tu página como un marco, con tu backend entregando un token de corta duración. Sin pestaña aparte, y tu app se entera cuando una llamada suena, se contesta y termina.

Disponible

API REST

Crea extensiones y agentes, arma campañas desde tus propios registros y consulta el estado. Claves que tú creas y revocas, con documento OpenAPI.

Disponible

Servidor MCP

Las mismas operaciones como herramientas para Claude, Claude Code y Codex, para que un asistente arme una campaña y lance llamadas con IA.

¿Dudas sobre una integración? Escríbenos a hola@rimay.cc.