Always test rendering and validate output before sending to customers.
Preview Messages
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
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:
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
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