Why it's the safest option
- There’s no fundamental limit once the conversation is open
- You can connect with as many contacts per day as you want, as inbound-first conversations are not ratelimited by Apple
- Users lose the ability to mark the conversation as spam
Where it falls short
- It requires the customer to take the first step, so you have to design for it
- It’s not usable for proactive notifications (reminders, alerts) to someone who hasn’t texted you yet
- It’s not usable for some types of leads
Example: a form that opens Messages
Try it
Clicking submit opens the customer’s Messages app with your number and a prefilled message already in the compose box. All they have to do is hit send.Example: dynamically picking a number (React)
If you lease multiple numbers to distribute volume, pick one dynamically instead of hardcoding a single number into your frontend. This looks up your leased numbers server-side (never expose your API key in the browser), filters for ones that are active and iMessage-capable, and hands one back to the button.contiguity.lease.leased()’s filter option to pull only your active, iMessage-capable numbers (backed by the leased numbers API), so you never have to keep a separate hardcoded list of numbers in sync with what you’ve actually leased.
This picks a random number per click, which is fine for a widget where each visitor is a new conversation. If you’re pooling numbers for high-volume outbound sending instead, see sticky sending, where each recipient sticks to one number.
Outbound-first
When you have to message someone first, and how to do it safely.
