Промоделируем ситуацию: знаменитейший помощник повара по имени Хуан после прогремевшей на весь мир истории со сковородками (отсылка) решил открыть свой собственный ресторанчик.  Хуан готовит прекрасную паэлью, возможно лучшую в Андалусии. Но есть одна проблема - Хуан уважает сиесту, а поэтому с 13:00 до 17:00 совершенно не следит за персоналом ресторана.  Наша цель: помочь веселому и предприимчивому Хуану успокоить клиентов и мотивировать сотрудников, чтобы они не забывали быстро готовить и доставлять заказы.  Для этого автоматизируем процессы обработки входящих вызов от клиентов с помощью Telecom API MTT. В данной статье мы: посмотрим сценарии для управления входящим вызовом;  добавим голосовые сообщения;  внесём автоматическое информирование персонала;  сохраним информацию о вызовах, чтобы понять кто чаще халтурит;  разберем необходимые методы Telecom API;  получим данные из заказа в интернет-магазине на бесплатном движке PrestaShop и передадим их в Telecom API. Оглавление: Процесс автоматизации обработки входящих вызовов Описание необходимых методов Telecom API Интеграция с PrestaShop Заключение  Перед началом содержательной части статьи традиционный дисклеймер. Я не программист, поэтому мои способы решения задач в этой статье не обязательно хороши на практике. Рассматривайте все, как пример для вдохновения. Для начала широкими мазками «опишем картину»  в целом. У Хуана есть ресторанчик, который готовит прекрасную паэлью. У ресторанчика есть простой сайт на базе движка PrestaShop. Все заказы так или иначе попадают в базу сайта. Персонал: Хуан - владелец и руководитель. Мигель - ленивый повар. Пабло - еще более ленивый курьер. Полноценно позволить себе сиесту может только Хуан, но, когда он отдыхает, остальные не излучают энтузиазм. Поэтому в период сиесты достаточно часто поступают звонки от клиентов, которые еще не дождались своего заказа. Каждый раз, когда такое случается, Хуан расстраивается, даже больше, чем в истории с уплывшими сковородками. Давайте же ему поможем! Сосредоточимся на оптимизации процесса обработки звонков с претензиями клиентов. Для начала изучим процесс «как есть»: Для тех, кто предпочитает текстом, распишем процесс в формате сценария.  Действующие лица: Хуан, клиент. Цель Поторопить ресторан с доставкой заказа. Предусловия: Пользователь сделал заказ. Заказ есть в БД Prestashop ресторана. Пользователь ждал дольше 50 минут. Основной путь: Клиент звонит в ресторан Хуана. Хуан встает с дивана, берет трубку. Хуан открывает PrestaShop. Хуан смотрит какой статус у заказа. Если заказ готов, Хуан поторапливает курьера. Хуан извиняется перед клиентом и просит подождать еще 25 минут. Хуан кладет трубку и идет обратно на диван. Завершение сценария. Альтернативный путь:	 5а. Заказ не готов, Хуан поторапливает кухню. 6а. Хуан приносит свои глубочайшие извинения клиенту и просит подождать еще 50 минут. Возврат к шагу 7. Результат Персонал суетится по поводу заказа, клиент успокоен. Давайте попробуем улучшить наш «рецепт» обработки звонков, добавив в него «щепотку» автоматизации. C помощью Telecom API мы можем: добавить проигрывание голосовых сообщений (premedia) клиенту и персоналу (сообщение будем генерировать из текста);  добавить автоматическую переадресацию звонка повару или курьеру; посмотреть статистику, чтобы понять, кто больше «филонит», пока у Хуана сиеста. Пришло время посмотреть на оптимизированный процесс: В этот раз процесс получился более внушительным, пришлось даже опустить некоторые детали, чтобы он вписался в верстку Хабра. Давайте как и в прошлый раз, рассмотрим его текстовое описание: Действующие лица: Клиент, повар, курьер, telecom API, сайт. Цель Поторопить ресторан с доставкой заказа. Предусловия: Пользователь сделал заказ. Заказ есть в БД Prestashop ресторана. Пользователь ждал дольше 50 минут. Основной путь: Клиент звонит в ресторан Хуана. Telecom API принимает вызов и делает запрос на сайт. Сайт ищет номер телефона клиента среди еще невыполненных заказов.  Если у звонящего есть незавершенные заказы, переходим к шагу 5. Хуану отправляется email о том, что был звонок клиента по незавершенному заказу. Если заказ готов (статус on delivery), включить клиенту premedia, что заказ будет доставлен через 25 минут. Сделать переадресацию вызова на курьера. Курьер слушает premedia о недовольном заказчике. Если клиент дослушал premedia, курьер извинился лично. Курьер бежит доставлять заказ. Сценарий завершен. Альтернативный путь - у клиента нет незавершенных заказов:	 4а. Переводим звонок на Хуана. Переходим к шагу 11. Альтернативный путь - заказ не готов:	 6а. Заказ не готов (статус on kitchen), включить клиенту premedia, что заказ будет доставлен через 50 минут. 7a. Повар слушает premedia о недовольном заказчике. 8a. Если клиент дослушал premedia, повар извиняется лично. 9а. Повар готовит заказ. 10а. Повар изменяет статус заказа в PrestaShop. 11а. Повар передает заказ курьеру. 12а. возврат к шагу 10 основного сценария. Теперь мы полностью освободили Хуана от рутины. Он может спокойно наслаждаться сиестой, лишь изредка проверяя статистику звонков и раздавая нагоняй по необходимости. Бегло взглянем на методы API, которые нам понадобятся для реализации этого кейса. Я не буду слишком подробно описывать каждый метод, потому что всё необходимое можно найти в документации. В одной из прошлых статей мы уже рассматривали API для создания premedia и управления входящим вызовом (правда с добавочными номерами), но, думаю, не будет лишним взглянуть еще раз с немного другого ракурса. Для всех методов, указанных в статье, я подготовил коллекцию и окружение Postman. Начнем с методов для создания аудио-сообщений (premedia) Для реализации сценария нам потребуется минимум 4 сообщения, например, со следующим текстом: Клиенту - «Ваш заказ передан в доставку, подождите 25 минут.”». Клиенту - «Ваш заказ готовится, пожалуйста, подождите 50 минут.”». Повару - «Мигель, клиент долго ждет заказ, готовь быстрей и отдай в доставку!”». Курьеру - «Пабло, экий ты дармоед, скорей неси заказ клиенту!”». В принципе API позволяет нам создавать каждый раз новое premedia с указанием данных конкретного клиента, а потом стирать его после выполнения заказа, но мы оставим это на самостоятельную проработку. Создадим новый медиафайл с помощью метода: createCustomerPrompt URL: https://gapi.mtt.ru:6443/v1/apiАвторизация: - Basic auth.Тип запроса: POST Пример тела запроса: Пример успешного ответа: Эту операцию нам надо повторить еще три раза, чтобы получить в сумме 4 аудиосообщения. Посмотреть, что у нас получилось, можно с помощью метода: getCustomerPrompts URL: https://gapi.mtt.ru:6443/v1/api Авторизация: - Basic auth.Тип запроса: POST Пример тела запроса: Пример успешного ответа: Если вдруг вы случайно создали лишнюю запись, её можно удалить с помощью метода:  deleteCustomerPrompt URL: https://gapi.mtt.ru:6443/v1/apiАвторизация: - Basic auth.Тип запроса: POST Пример тела запроса: Пример успешного ответа: Для начала добавим ссылку на скрипт, в котором будет реализована логика управления вызовом. setSipCallControlURL URL: https://api.mtt.ru/ipcr/Авторизация: - Basic auth.Тип запроса: POST Пример тела запроса: Пример успешного ответа: Посмотреть текущие настройки можно с помощью метода: getSipSettings URL: https://api.mtt.ru/ipcr/Авторизация: - Basic authТип запроса: POST Пример тела запроса: Пример успешного ответа: Остальные методы можно изучить в документации. Посмотреть статистику звонков для номера своего ресторанчика Хуан сможет в любое время благодаря методу: getCallHistory URL: https://webapicommon.mtt.ru/index.phpАвторизация: - Basic authТип запроса: POST Пример тела запроса: Пример успешного ответа: Так же Хуан может прослушать записи разговора в формате wav или mp3.  Ниже пример метода для mp3 (для wav параметр format нужно убрать) Метод records Авторизация - Basic authТип запроса: GETURL: https://rc.mtt.ru/v2/records/ID_ЗВОНКА_51B2844D_FC28243B_/urls?format=mp3 Пример успешного ответа: Если бы у Хуана была CRM, он мог бы добавлять записи разговора к информации о звонках, но в нашем случае он еще ей не обзавелся. Сегодня мы решим очень простую задачу: получить данные о заказах из магазина, проверить совпадение номера звонящего с кем-то из клиентов.  При необходимости сделать редирект вызова на кухню или в доставку, с включением соответствующих аудиосообщений. Вы можете доработать кейс, например, добавив создание и удаление файла premedia так, чтобы он содержал информацию о клиенте и его заказе. Прежде, чем использовать API магазина, нам нужно сделать некоторую подготовку. Во-первых, необходимо получить ключ доступа. Во-вторых, в профиле пользователя сделать обязательным поле mobile_number. Можно использовать любое другое, просто не забудьте поменять код в файле call.php. Еще для наглядности я создал новые статусы заказов, вы можете использовать существующие. В нашей интеграции мы будем использовать только методы для работы с заказами и адресами. Если будете использовать пример из файла call.php, установите себе на сервер (хостинг) библиотеку для работы с API. Как всегда дисклеймер. Я не программист. Код ниже я «склепал» из того, что попалось под руку. Код рабочий, но явно далек от идеала, не надо им руководствоваться как истинной в последней инстанции. Полный листинг файла call.php я оставлю под спойлером  Давайте разберем код по логическим блокам. Это подготовительный блок. В самом начале мы прописываем заголовки и пишем запросы в лог (возможно на сервере потребуется создать файл log.txt). Далее мы прописываем все ключевые параметры. Адрес сайта, ключ API, заглушки, медиафайлы. На всякий случай напомню, что здесь и далее «сторона А» - звонящий, «сторона Б» - абонент, принимающий звонок. В самом конце импортируем библиотеку PrestaShop.  Получаем список заказов, у которых статус «В доставке» или «На кухне». Пробегаем по каждому заказу, делаем запрос на данные об адресе и проверяем номер мобильного телефона клиента. Если телефон в адресе заказа совпадает с телефоном звонящего, то мы сохраняем данные в переменные и идем дальше. Если есть совпадение номера, мы сначала отправляем Хуану письмо, чтобы он знал, о возможных проблемах. Затем проверяем статус заказа и назначаем premedia и телефоны для редиректа, на кухню или в доставку соответственно. Если совпадений не было, значит клиент новый и мы просто звоним Хуану на дефолтный номер. Финальный этап, формирование ответа на запрос Telecom API. Не забудьте залить файл на сервер (хостинг). И привязать к нему Telecom API методом setSipCallControlURL. Подводя итоги, сегодня мы: Освободили время менеджмента, улучшив процесс обработки звонков. Познакомились с методами Telecom API для автоматизации работы с входящими вызовами. Одним глазом глянули на PrestaShop API и подружили сайт с Telecom API. Пожелаем Хуану удачи в ресторанном бизнесе! Надеюсь, что и для вас статья была полезна. Код файла call.php, коллекцию и окружение Postman я выложил на GitHub.  Технический писатель / системный аналитик