Relay SMS Platform
Best Practices

3. Test Before Sending

Always test rendering and validate output before sending to customers.

Preview Messages

TypeScriptCode
import { getTemplate, renderTemplate } from '@relay-works/templates'; // Always render and preview first const result = renderTemplate(template, data); console.log('Preview:', result.text); console.log('Segments:', result.segments); console.log('Characters:', result.characterCount); console.log('Cost:', `$${result.segments * 0.02}`); // Verify before sending if (result.segments <= 2) { // Keep costs reasonable await relay.messages.send({ to: phoneNumber, message: result.text }); }

Validation Before Sending

TypeScriptCode
import { validateTemplateData } from '@relay-works/templates'; async function sendSafely(templateId: string, data: any, recipient: string) { const template = getTemplate(templateId); // 1. Validate data const validation = validateTemplateData(template, data); if (!validation.valid) { console.error('Validation failed:', validation.errors); return { success: false, errors: validation.errors }; } // 2. Render and preview const result = renderTemplate(template, data); console.log('Preview:', result.text); console.log('Segments:', result.segments); // 3. Check segment count if (result.segments > 3) { console.warn('Message too long - consider shortening'); return { success: false, error: 'Message too long' }; } // 4. Send try { const message = await relay.messages.send({ to: recipient, message: result.text }); return { success: true, messageId: message.id }; } catch (error) { console.error('Send failed:', error); return { success: false, error: error.message }; } }

Development Testing

Use test phone numbers in development:

TypeScriptCode
const TEST_NUMBERS = { dev: '+15551234567', staging: '+15551234568' }; // Send test messages if (process.env.NODE_ENV === 'development') { await sendSafely('otp-verify', { code: '123456', company: 'Test Co' }, TEST_NUMBERS.dev); }

Test Checklist

Before sending to production:

  • ✅ Validate all template data
  • ✅ Preview rendered message text
  • ✅ Check character count and segments
  • ✅ Verify cost estimate is acceptable
  • ✅ Test with actual phone numbers
  • ✅ Confirm message clarity and tone
  • ✅ Check for typos or formatting issues

Automated Testing

TypeScriptCode
import { describe, it, expect } from '@jest/globals'; describe('Template Rendering', () => { it('should render OTP template correctly', () => { const template = getTemplate('otp-verify'); const result = renderTemplate(template, { code: '482916', company: 'Acme' }); expect(result.text).toBe('482916 is your Acme verification code.'); expect(result.segments).toBe(1); expect(result.characterCount).toBeLessThan(160); }); it('should stay within single segment', () => { const result = renderTemplate(template, data); expect(result.segments).toBe(1); }); });

Next Steps:

Last modified on