19 July 2013

Сложное в очевидном: как мы делали интерфейс звонка в Яндекс.Shell

Яндекс corporate blogInterfaces
imageСегодня мы хотим рассказать о том, как создавали такую, как иногда кажется, очевидную вещь, как интерфейс звонка в Яндекс.Shell. К нашему удивлению, за время работы мы поняли, как давно никто всерьёз не думал над тем, что в большинстве телефонов он функционально не улучшался уже много лет. А мир за это время ушёл вперёд. Настало время бросить ретроспективный взгляд на то, как он создавался, с какими задачами мы столкнулись и к каким решениям пришли.

Короткому и понятному английскому слову «dialer» еще только предстоит обзавестись гармоничным, не режущим слух русским эквивалентом. Если вы заглянете в словарь, то в качестве перевода вам будет предложен зубодробительный «номеронабиратель». Однако в живом языке больше прижились слова «звонилка», «дозвонщик» и «дайлер». В рамках своей внутренней кухни мы привыкли использовать именно последний вариант, его мы и будем придерживаться в этом посте.

К идее о том, что для нашей оболочки нужно создать собственный дайлер, мы пришли, отталкиваясь от того, что в этом сегменте ничего по-настоящему нового не появлялось уже достаточно давно. Существовавшие на тот момент в айфонах и андроидах родные и сторонние дайлеры были весьма убедительны и красивы. Но по функциональности все они недалеко ушли от того, что мы уже видели в обычных мобильниках досмартфонной эры. Необходимо было не просто наделить наш дайлер полным набором привычных ожидаемых функций, вроде списка избранных, журнала звонков или T9, но и пойти существенно дальше, а именно – внедрить в него разработки, до сих пор не встречавшиеся на рынке.

Нашим преимуществом в достижении поставленной цели стало то, что, в отличие от аналогов, Яндекс.Дайлер создавался изначально заточенным под Россию и другие страны присутствия Яндекса, что дало нам возможность учитывать интересы и особенности поведения именно «наших» пользователей. Кроме того, давно разработанные пользовательские сервисы — сильная сторона Яндекса, и именно с их помощью мы рассчитывали улучшить функциональность нашего дайлера.

Но обо всем по порядку.

Бесконечная адресная книга


Одной из первых наших задач стала необходимость минимизировать количество кликов, которое требуется пользователю, чтобы позвонить в нужную ему организацию. Ведь одним из популярных сценариев использования телефона были и остаются звонки в различные организации, в том числе и неизвестные пользователю.

Сформулированная задача предполагает полное переосмысление стереотипа поведения пользователя. До сих пор звонок в нужную организацию подразумевал целый комплекс последовательных действий. Рассмотрим небольшой пример. Если мне нужно позвонить в ближайшую аптеку, какие действия мне придется совершить? Возможны различные варианты, но очевидно, они так или иначе будут включать:

— позиционирование (для начала, где я нахожусь?);
— поиск аптек в заданном районе;
— выбор аптеки;
— поиск ее контактной информации;
— копирование или ручной перенос номера телефона;
— собственно звонок.

Вероятно, каждый из нас давно уже выработал более-менее привычные сценарии совершения всех этих действий. Здесь нам на помощь приходят и элементарный поиск (как мобильный, так и десктопный), и карты, и навигатор, и много что еще. Проблема в том, что для всех этих сервисов всё, что связано с осуществлением звонка, является функцией в лучшем случае вторичной. И из-за этого путь от возникновения потребности позвонить в аптеку до, непосредственно, звонка оказывается достаточно долог и тернист.
Вот если бы телефон аптеки был бы того же уровня доступности, что и любой номер в нашей адресной книге… Вы уже поняли, что идея внедрить и/или подгружать из облака готовую справочную информацию в сам дайлер витала в воздухе.

Мы решили, что отныне список контактов не будет более ограничиваться персональными контактами пользователя. По мере того как пользователь вводит имя или название, кроме его собственных контактов ему теперь подставляются удовлетворяющие поисковому критерию подсказки, основанные на самых популярных запросах пользователей Яндекса. Эти подсказки выдаются мгновенно, поскольку уже загружены на телефон. При выборе одной из подсказок пользователю выдается соответствующий список ближайших организаций из обширной базы Яндекс.Справочника с учетом его текущего местоположения.

Пользователь может сразу же позвонить в любую из найденных организаций, либо предварительно изучить ее карточку. Карточка обычно бывает максимально информативной: с телефоном, адресом, положением на карте и веб-сайтом. Любым из этих контактов можно мгновенно, в один клик, воспользоваться или добавить карточку организации к собственным контактам.
Весь путь от идеи до звонка сводится, фактически, к одному пункту — определиться с выбором конкретной аптеки. А все что может сделать машина, пусть делает машина.

Вернемся к нашему примеру с аптекой и посмотрим, как теперь проходится этот путь.

1. Заходим в дайлер, вкладка «Контакты».

2. Начинаем набирать слово «аптека». Долго набирать не придется, потому что уже после «ап» подсказка выдает не только слово «аптека», но и несколько наиболее популярных запросов, связанных со словом «аптеки».



3. Выбираем нужную подсказку. Попадаем в список подходящих нам аптек, отсортированный по удаленности от нашего местоположения.



4. Звоним.

Или не звоним. А заходим в карточку контакта, чтобы воспользоваться любым другим средством связи или добавить эту карточку к себе в контакты.



Подключение к дайлеру такой мощной базы, как Яндекс.Справочник, сделало адресную книгу пользователя интерактивной, локализованной по местоположению и, по сути, бесконечной. Однажды освоив возможности бесконечной адресной книги, пользователь постепенно начинает изменять стереотип поведения в пользу простого как дважды два правила: «хочешь позвонить — заходи в дайлер». Не в поисковый виджет, не в браузер, не в карты, а сразу в дайлер. Ведь это так естественно.

Определение неизвестных номеров


Аппетит приходит во время еды. И эта возможность — определение неизвестных номеров — тесно связана с предыдущей. Осознав преимущества интеграции адресной книги с Яндекс.Справочником, мы захотели большего, и в первую очередь — автоматического определения принадлежности неизвестного номера во время звонка. Трудно переоценить востребованность данной функции у пользователей. Поступает звонок с неизвестного номера, дайлер перехватывает номер, находит его в справочнике и выводит на дисплей название звонящей организации.

Однако в данном случае мы столкнулись с неразрешимой проблемой. Без встраивания нашей оболочки в систему мы не имеем возможности подменять или вносить какие-либо изменения в стандартное окно входящего звонка. В некоторых дайлерах эта проблема решается (вернее, обходится) при помощи собственного окна входящего звонка, выплывающего поверх стандартного. Однако это весьма ненадежный подход, плохо сказывающийся на стабильности. А стабильность для нас — тот фактор, пожертвовать которым мы ни в коем случае не могли.

Поэтому пришлось на время отказаться от идеи подгружать данные о звонящем из Справочника. Зато ничто не помешало нам воплотить ту же самую идею — определение неизвестных номеров — но уже в журнале звонков.
В дайлере есть собственный журнал звонков. Помимо стандартных возможностей (объединение звонков, продолжительность и пр.) мы добавили к нему определение номеров. Если номер неизвестен, но найден в Яндекс.Справочнике, соответствующая запись в журнале приобретает более приятный и информативный вид. Подробную карточку такого определившегося номера можно быстро, в два клика, добавить к собственным контактам.



Речь идет, разумеется, о всех видах звонков: входящие, пропущенные и исходящие, независимо от того, искали ли вы эти номера с помощью бесконечной адресной книги или просто ввели с клавиатуры.

Логотипы мобильных операторов


Следующая вещь, которая показалась нам достойной реализации, — это помощь в определении мобильных операторов. Для очень многих пользователей на постсоветском пространстве принципиально важно знать, на номера каких операторов они звонят, потому что это непосредственным образом сказывается на стоимости разговора. Или, скажем, у вашего друга два номера от разных операторов, а он просил звонить ему исключительно на Мегафон.

А поскольку мало кто может назвать наизусть все коды всех мобильных операторов, мы и решили ввести это маленькое, но приятное дополнение. Дайлер определяет мобильного оператора для всех мобильных телефонов (если только это возможно) и подставляет иконку соответствующего оператора перед номером (например, в карточке контакта).



Транслитерированный поиск


Следующая проблема, которую можно решить с помощью нашего дайлера, уходит корнями в прошлое. Во времена, когда появились первые телефоны, в адресную книгу которых контакты можно было вводить не только латиницей, но и кириллицей. Сегодня эта проблема усугубляется еще несколькими факторами.

К сожалению, то, в каком виде контакты существуют в наших адресных книгах, не всегда зависит только от нас. Одни контакты мы заносим сами, другие наследуются из почтовых учетных записей, третьи — из социальных сетей. Одни контакты занесены вчера, другие хранятся с тех славных времен начала века, когда мы купили свою первую Нокию 3310. Далеко не каждый пользователь берет на себя труд объединять контакты из разных учетных записей. Далеко не каждый может с уверенностью сказать, как записан тот или иной его контакт — кириллицей или латиницей.

Мы решили, что пользователь отныне не должен задумываться, в какой раскладке у него записан тот или иной контакт — транслитерированный поиск должен обеспечить «нахождаемость» любого контакта и при любом способе ввода. Результаты поиска выдаются мгновенно и вне зависимости от того, в какой раскладке происходит набор.



Поиск по уменьшительным именам


Разобравшись с транслитерацией, мы обратились к еще одной вещи, в которой пользователи охотно путаются. По тем же описанным выше причинам контакты у пользователя могут быть занесены как по полным именам, так и по уменьшительным. Мы научили дайлер искать контакты обоими способами. По запросу [Ваня] он найдет всех Иванов, по запросу [Екатерина] — всех Кать. Лучше всего работу поиска проиллюстрирует скриншот.



Как уже сообразил пытливый читатель, объединяя две последние возможности, мы получаем, что по запросу [Vova] найдутся все Владимиры, что и следовало доказать.

Обе эти функции (транслитерированный поиск и поиск по уменьшительным именам) не были реализованы в упоминавшихся выше айфоновском и андроидовском дайлерах, просто потому что сама проблема не лежала для их создателей на поверхности в силу своей неактуальности для американского и европейского рынков. Да и реализация этих функций, особенно поиска по уменьшительным именам, для всех поддерживаемых локалей была бы весьма проблематичной. Мы же довольствовались употребляемыми в России именами и постарались сделать для большинства из них них поддержку этой функциональности.
Tags:ЯндексЯндекс.Shellдайлер
Hubs: Яндекс corporate blog Interfaces
+79
39.1k 71
Comments 86