As of today, a necessity across almost all of the data Connect 211 ingests is to prioritize the order in which phone numbers are displayed. We receive up to 11 phone numbers (or more) per resource from certain data sources. We are able to prioritize those on a per-source basis so that we always know in which order they should be displayed. In other words, we always know which number help-seekers should call first. Frequently, we filter most of the other numbers out, but knowing and encoding those priorities is the key to success here.
However, we’re only able to prioritize contact methods within types. I can prioritize phone numbers, and I can prioritize URLs, but I cannot prioritize them together. There are use cases for doing so. For example, consider this sentiment:
Try the main number first, otherwise email us. If neither works, fallback to these other two phone numbers.
As a creator of user facing solutions, I’d love a machine readable queue that tells me whether I should prioritize showing a phone number or URL to users for the next step.
A possible solution from a technical standpoint.
If my proposal to add an email object is accepted, we would then have denormalized objects for phone, url, and email. What if we consolidate those into a contact_method table? Different contact methods would be delineated by types of phone, url, email, and whatever else comes up in future.
I see two main reasons for doing this:
- It’s more extensible. Adding other or new contact methods in future involves adding a new type, not a whole new object. Put another way, it would trigger a minor version upgrade instead of a major version upgrade.
- Having all methods in one place would set the stage for easier, machine readable ways to express which contact methods users should use, and in what order.
Perks:
- Standardized way to communicate all contact methods
- More easily extensible
- Allows ranking/prioritize contact methods across different types
Problems:
- May not be as intuitive to understand at first glance
- Enumerated lists like
phone.typewould change depending on the contact method type (i.e.phonevsurl). Or, considered another way, phones may have necessary fields that preclude them from being easily stored along side other contact methods.
What’s next?
I’m eager for feedback on this idea.
- What are other methods we could use to solve ranking/prioritization among contact methods?
- How might we use attributes to solve this problem?
- Are there other uses-cases that support or negate this presumed need?