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.
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,
});