# Send Message — Quriiri

> Sends an SMS message using the Quriiri API. See the documentation

- Key: `quriiri-send-message`
- Type: Action (Write)
- Version: 0.0.3
- App: Quriiri (`quriiri`) — https://pipedream.com/apps/quriiri.md
- This page (HTML): https://pipedream.com/apps/quriiri/actions/send-message
- Hints: open-world
- Source: https://github.com/PipedreamHQ/pipedream/blob/master/components/quriiri/actions/send-message/send-message.mjs

## Description

Sends an SMS message using the Quriiri API. [See the documentation](https://docs.quriiri.fi/docs/quriiri/send-sms/operations/create-a)

## Props

| Prop | Type | Required | Description |
|---|---|---|---|
| `sender` | `string` | No | Message sender. International numbers with + or 00 prefix and 5 to 15 numbers following it, national ones / shortcodes with 1 to 15 numbers, alphanumeric with max 11 characters. Although other characters may work, we cannot guarantee it and recommend restricting the characters used in alphanumeric senders to letters A-Z and a-z, and digits 0-9. |
| `senderType` | `string` | No | Sender type. If missing, an attempt is made to guess one from the sender, and guess failure results in an error. |
| `destination` | `string` | Yes | Message destination number in international or national format. International numbers should begin with + or 00 prefix and national format numbers will be converted to Finnish ones. For maximum reliability, we recommend using only international format numbers, with nothing but digits following the international prefix. The HTTP response contains information about which international number each accepted destination was converted to or treated as. Accepts multiple values array in JSON, set multiple times with form POST and GET. |
| `text` | `string` | No | Message text. Based on the text, the service automatically determines whether the message can be sent using the GSM character set or if sending it as Unicode is required. Also, the service determines automatically how many SMS messages sending the message will require. The general rule of thumb is that the first SMS using the GSM character set can hold up to 160 characters; if there are more, concatenation is required and each SMS (including the first one) can hold up to 153 characters. Note that some characters in the GSM character set will consume two characters instead of one. For Unicode, the corresponding numbers are 70 and 67. If text is provided, data is ignored. Message templates can be used by finding the template ID from the UI and using {template_ID} placeholder, e.g. "Hello ${template_361}!" |
| `data` | `string` | No | Binary message data, bytes encoded as hexadecimal characters. If text is provided, data is ignored. Maximum number of bytes in udh and data combined is 140. |
| `udh` | `string` | No | User data header, bytes encoded as hexadecimal characters. Maximum number of bytes in udh and data combined is 140. Note that concatenated text messages may be sent using the entire message context in the text parameter, without setting udh, and the service will take care of splitting the message into appropriately sized parts. |
| `batchId` | `string` | No | Batch ID, max 255 characters. Used to group interrelated messages, for example if some special actions should be taken to a group of separately sent but logically related messages. Under normal circumstances, the service does not use this parameter but just relays it back in corresponding delivery reports. |
| `billingRef` | `string` | No | Billing reference, max 255 characters. This is solely for the API user, the service does not do anything else with it besides relaying it back in corresponding delivery reports. |
| `drUrl` | `string` | No | Delivery report URL. URL where to relay delivery reports |
| `drType` | `string` | No | Delivery report type. Similarly as for supported API request types. Defaults to the format of the API request. |
| `flash` | `boolean` | No | Send a "flash" SMS if set to true. |
| `validity` | `integer` | No | Validity period of the message in minutes. If not set, defaults to the value set in your account details. |
| `scheduleTime` | `string` | No | Schedule time can be used for message scheduling. If a message is scheduled, the API response contains messageid for later message cancellation, if needed. Schedule time must be set in RFC 3339 format, ie. 2020-05-31T04:20:03Z. In scheduling the seconds and milliseconds are ignored, so every scheduled message is sent in a resolution of minutes. |

## Run it

**MCP**

```ts
import { Client } from "@modelcontextprotocol/sdk/client/index.js"
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js"
import { PipedreamClient } from "@pipedream/sdk"

const pd = new PipedreamClient({
  projectId: process.env.PIPEDREAM_PROJECT_ID!,
  clientId: process.env.PIPEDREAM_CLIENT_ID!,
  clientSecret: process.env.PIPEDREAM_CLIENT_SECRET!,
  projectEnvironment: "production",
})

const accessToken = await pd.rawAccessToken

const transport = new StreamableHTTPClientTransport(
  new URL("https://remote.mcp.pipedream.net/v3"),
  {
    requestInit: {
      headers: {
        Authorization: `Bearer ${accessToken}`,
        "x-pd-project-id": process.env.PIPEDREAM_PROJECT_ID!,
        "x-pd-environment": "production",
        "x-pd-external-user-id": "{external_user_id}", // any stable ID for this user in your system
        "x-pd-app-slug": "quriiri",
      },
    },
  },
)

const mcp = new Client({ name: "my-agent", version: "1.0.0" })
await mcp.connect(transport)

const { tools } = await mcp.listTools()

// listTools() hands your model this tool's input schema, so it can
// fill the arguments itself:
const result = await mcp.callTool({
  name: "quriiri-send-message",
  arguments: {
    sender: "Sender",
    senderType: "Sender Type",
  },
})
```

**TypeScript**

```ts
import { PipedreamClient } from "@pipedream/sdk"

const pd = new PipedreamClient({
  projectId: process.env.PIPEDREAM_PROJECT_ID!,
  clientId: process.env.PIPEDREAM_CLIENT_ID!,
  clientSecret: process.env.PIPEDREAM_CLIENT_SECRET!,
  projectEnvironment: "production",
})

const result = await pd.actions.run({
  id: "quriiri-send-message",
  externalUserId: "{external_user_id}", // any stable ID for this user in your system
  configuredProps: {
    quriiri: { authProvisionId: "apn_xxxxxxx" },
    sender: "Sender",
    senderType: "Sender Type",
  },
})

console.log(result)
```

**cURL**

```bash
curl -X POST https://api.pipedream.com/v1/connect/{project_id}/actions/run \
  -H "Content-Type: application/json" \
  -H "X-PD-Environment: production" \
  -H "Authorization: Bearer {access_token}" \
  -d '{
    "external_user_id": "{external_user_id}",
    "id": "quriiri-send-message",
    "configured_props": {
      "quriiri": { "authProvisionId": "apn_xxxxxxx" },
      "sender": "Sender",
      "senderType": "Sender Type"
    }
  }'
```

---

- App: https://pipedream.com/apps/quriiri.md · All apps: https://pipedream.com/apps
