Skip to content

Send & receive SMS

Membrane includes an sms program (pre-installed in your workspace) for sending and receiving text messages programmatically.

::: note

You can only configure one phone number at the moment (to send texts to yourself), but we plan to remove that limitation. Send us a note if that’s something you’d like asap, and/or upvote it on our roadmap.

:::

Configure

To configure your sms program, find it in the Navigator, click the configure action, type in your phone number, and hit “Invoke”.

Send

To send yourself a text manually, click on the sms program in the Navigator, click the send action, type in a message, and hit “Invoke”. Check your phone! (And Membrane Logs 👀).

To send yourself a text programmatically, add the sms program as a connection to any program and call:

nodes.sms.send({ message: "whatever" });

Receive

Try responding to the text you sent yourself above, and check the sms Logs for your text.

When sms receives a text, it fires a received event that other Membrane programs can subscribe to. We created an sms-subscriber program as a minimal example of how to do this.

import { state, nodes, root } from "membrane"
state.messages ??= []
/**
* This action subscribes to the `sms.received` event.
* Invoke it to set up the subscription.
*/
export async function listenSms() {
await nodes.sms.received.$subscribe(root.readSms)
}
/**
* This action is the handler for `sms.received` events.
* When you text Membrane, you'll see the `received` event in Logs.
*/
export async function readSms(_, { event }) {
const received = event.message
state.messages.push(received)
// TODO: do something cool!
}