RingCentral · Arazzo Workflow

RingCentral Send an SMS and Track Its Delivery

Version 1.0.0

Send an SMS from an extension and poll the message store until it reaches a terminal delivery state.

1 workflow 2 source APIs 1 provider
View Spec View on GitHub CommunicationsUCaaSVoiceVideoContact CenterSMSMessagingFaxArazzoWorkflows

Provider

ringcentral

Workflows

send-sms-track-delivery
Send a single SMS message and confirm the carrier delivered it.
Creates an outbound SMS from an extension's RingCentral number and then polls the message store record for that message until the aggregated message status settles into a terminal value.
3 steps inputs: accountId, extensionId, fromPhoneNumber, text, toPhoneNumber outputs: conversationId, failureRecipients, finalStatus, messageId
1
sendSms
Create the outbound SMS. RingCentral accepts the message and returns a message store record whose status normally starts as "Queued".
2
checkDeliveryStatus
Read the message back from the message store to inspect its aggregated delivery status. Repeat this step while the status is still in flight.
3
readFailureDetail
Re-read the failed message so the per-recipient error detail is captured for logging, alerting, or retry against an alternate number.

Source API Descriptions

Arazzo Workflow Specification

Raw ↑
arazzo: 1.0.1
info:
  title: RingCentral Send an SMS and Track Its Delivery
  summary: Send an SMS from an extension and poll the message store until it reaches a terminal delivery state.
  description: >-
    The most common RingCentral messaging integration. An SMS is created from a
    RingCentral phone number belonging to an extension, and the returned message
    id is then read back from the message store to follow the message through its
    delivery lifecycle. RingCentral returns `Queued` immediately, so the flow
    branches on the polled status: it ends on `Delivered`, retries while the
    message is still `Queued` or `Sent`, and surfaces the failure detail when the
    carrier reports `DeliveryFailed` or `SendingFailed`. Every step spells out its
    request inline so the flow can be read and executed without opening the
    underlying OpenAPI description.
  version: 1.0.0
sourceDescriptions:
- name: messageStoreApi
  url: ../openapi/ringcentral-message-store-api-openapi.yml
  type: openapi
- name: smsApi
  url: ../openapi/ringcentral-sms-api-openapi.yml
  type: openapi
workflows:
- workflowId: send-sms-track-delivery
  summary: Send a single SMS message and confirm the carrier delivered it.
  description: >-
    Creates an outbound SMS from an extension's RingCentral number and then polls
    the message store record for that message until the aggregated message status
    settles into a terminal value.
  inputs:
    type: object
    required:
    - fromPhoneNumber
    - toPhoneNumber
    - text
    properties:
      accountId:
        type: string
        default: '~'
        description: >-
          Internal identifier of the RingCentral account. Use "~" for the account
          associated with the current authorization session.
      extensionId:
        type: string
        default: '~'
        description: >-
          Internal identifier of the extension sending the message. Use "~" for the
          extension associated with the current authorization session.
      fromPhoneNumber:
        type: string
        description: >-
          A RingCentral phone number in E.164 format that is SMS-enabled and
          assigned to the sending extension (e.g. +15551234567).
      toPhoneNumber:
        type: string
        description: The recipient phone number in E.164 format.
      text:
        type: string
        description: The message body to send.
  steps:
  - stepId: sendSms
    description: >-
      Create the outbound SMS. RingCentral accepts the message and returns a
      message store record whose status normally starts as "Queued".
    operationId: createSMSMessage
    parameters:
    - name: accountId
      in: path
      value: $inputs.accountId
    - name: extensionId
      in: path
      value: $inputs.extensionId
    requestBody:
      contentType: application/json
      payload:
        from:
          phoneNumber: $inputs.fromPhoneNumber
        to:
        - phoneNumber: $inputs.toPhoneNumber
        text: $inputs.text
    successCriteria:
    - condition: $statusCode == 200
    outputs:
      messageId: $response.body#/id
      conversationId: $response.body#/conversationId
      initialStatus: $response.body#/messageStatus
      creationTime: $response.body#/creationTime
  - stepId: checkDeliveryStatus
    description: >-
      Read the message back from the message store to inspect its aggregated
      delivery status. Repeat this step while the status is still in flight.
    operationId: readMessage
    parameters:
    - name: accountId
      in: path
      value: $inputs.accountId
    - name: extensionId
      in: path
      value: $inputs.extensionId
    - name: messageId
      in: path
      value: $steps.sendSms.outputs.messageId
    successCriteria:
    - condition: $statusCode == 200
    outputs:
      messageStatus: $response.body#/messageStatus
      lastModifiedTime: $response.body#/lastModifiedTime
      toRecipients: $response.body#/to
    onSuccess:
    - name: delivered
      type: end
      criteria:
      - context: $response.body
        condition: $.messageStatus == 'Delivered'
        type: jsonpath
    - name: stillInFlight
      type: goto
      stepId: checkDeliveryStatus
      criteria:
      - context: $response.body
        condition: $.messageStatus in ['Queued', 'Sent']
        type: jsonpath
    - name: deliveryFailed
      type: goto
      stepId: readFailureDetail
      criteria:
      - context: $response.body
        condition: $.messageStatus in ['DeliveryFailed', 'SendingFailed']
        type: jsonpath
  - stepId: readFailureDetail
    description: >-
      Re-read the failed message so the per-recipient error detail is captured for
      logging, alerting, or retry against an alternate number.
    operationId: readMessage
    parameters:
    - name: accountId
      in: path
      value: $inputs.accountId
    - name: extensionId
      in: path
      value: $inputs.extensionId
    - name: messageId
      in: path
      value: $steps.sendSms.outputs.messageId
    successCriteria:
    - condition: $statusCode == 200
    outputs:
      failedStatus: $response.body#/messageStatus
      failureRecipients: $response.body#/to
  outputs:
    messageId: $steps.sendSms.outputs.messageId
    conversationId: $steps.sendSms.outputs.conversationId
    finalStatus: $steps.checkDeliveryStatus.outputs.messageStatus
    failureRecipients: $steps.readFailureDetail.outputs.failureRecipients

Work with this as data

Every workflow here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for arazzo workflows

4 MCP tools reach this
  • find_arazzoBrowse and filter every workflow in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This workflow
curl "https://apis.io/api/v1/arazzo/ringcentral-send-sms-track-delivery-workflow"
All arazzo workflows
curl "https://apis.io/api/v1/arazzo?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.