Forward SMS text messages to code and tests via Webhooks or HTTP

Create real phone numbers to handle inbound SMS messages. Direct TXT to your application or test suites. Process SMS two-factor authentication flows.

Services like Twilio and MailSlurp offer phone number and SMS APIs that can be used to build SMS routing functionality for automation and testing.

Create phone numbers

Create a phone number for a given region in the MailSlurp dashboard.

phone number api

You can then access and control the phone number using the MailSlurp API client.

const mailslurp = new MailSlurp({ apiKey });
// fetch a phone number (must create phone numbers in the dashboard first)
const {
  content: [phoneNumber],
} = await mailslurp.phoneController.getPhoneNumbers({
  size: 1,
  phoneCountry: GetPhoneNumbersPhoneCountryEnum.US,
});
expect(phoneNumber.phoneNumber).toEqual('+19108074451');

Redirect SMS with webhooks

Create a webhook for your phone number to route incoming SMS messages to your endpoint of choice, be that a server, slack, or lambda function.

// create a webhook for a phone number to have new SMS sent to your server
const webhook =
  await mailslurp.webhookController.createWebhookForPhoneNumber({
    phoneNumberId: phoneNumber.id,
    createWebhookOptions: {
      eventName: CreateWebhookOptionsEventNameEnum.NEW_SMS,
      url: 'https://myserver.com',
      name: 'Process SMS',
    },
  });

Wait for arrival of SMS

In tests or automation logic you can hold a connection open until an expected SMS txt message is received:

// wait for the latest unread sms
const [sms] = await mailslurp.waitController.waitForSms({
  waitForSmsConditions: {
    count: 1,
    unreadOnly: true,
    phoneNumberId: phoneNumber.id,
    timeout: 30_000,
  },
});
// extract a code from body with regex
expect(sms.body).toContain('Your code: 123');
const [, code] = /.+:\s([0-9]{3})/.exec(sms.body);
expect(code).toEqual('123');

Reading text messages in code

Extract SMS message content like so:

// fetch a message
const txtMessage = await mailslurp.smsController.getSmsMessage({
  smsId: sms.id,
});
expect(txtMessage.read).toEqual(true);
expect(txtMessage.fromNumber).toEqual('+13252527014');
// delete all messages in phone number
await mailslurp.smsController.deleteSmsMessages({
  phoneNumberId: sms.phoneNumber,
});