Русский
Русский
English
Статистика
Реклама

Weather api

Не спешите выкидывать свой PolyCom

20.11.2020 18:16:58 | Автор: admin

Если у вас где-то в углу неприкаянно грустит телефон компании Polycom не спешите от него избавляться! Он еще сможет вам послужить. По крайней мере ковыряние с ним может доставить массу удовольствия. Все нижеописанное тестировалось на устаревшей модели Polycom SoundPoint IP 450(от 1500 рублей за БУ на ebay), но также подходит и для большинства более современных моделей т.к. все они работают под управлением одной и той-же операционной системы UC.

Да, именно так и вы не ослышались даже древний офисный телефон работает под управлением проприетарной ОС.

Итак, что-же полезного и интересного можно сделать с телефоном Polycom в домашних условиях:

  • Вывод полезной информации на экран телефона и использование внутреннего браузера

  • SIP телефония & Lync integration(Skype for Business) для SIP моделей

  • Интеграция с Google Chrome набор номера через расширение для google chrome

  • Кастомизация UI телефона

  • Интеграция с LDAP и AD и использование телефонных книг

Итак, обо все по прядку.

Встроенный браузер

Большинство моделей телефонов polycom оснащены тем или иным экранчиком, а прошивка поддерживает xhtml-браузер. У браузера есть 2 режима работы: idle отображается контент во время ожидания и active отображается контент во время использования телефона.

Телефон поддерживает только самые базовые html-теги, а также несколько собственных тегов для управления навигацией:

<html>

<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/></head>

<body>

<softkey index="1" label="Back" action="SoftKey:Back" />

<softkey index="2" label="Weather" action="SoftKey:Fetch;http://raspberrypi:88" />

<softkey index="3" label="Refresh" action="SoftKey:Refresh" />

<a href="Tel://89264341830">Taxi</a>|

<a href="Tel://89652991881">Суши</a>|

<a href="Tel://84965246699">Пицца</a>|

<br/>

<a href="Key:DoNotDisturb">DNDSettings</a>

</body>

</html>

Современные модели телефонов имеют расширенную поддержку HTML и даже умеют работать с Javascript. Используя встроенный браузер телефона довольно легко каcтомизировать UI/UX под свои предпочтения. В моем случае - это отображение прогноза погоды на основе Yandex Weather API и несколько статических страниц с наиболее часто используемыми телефонами.

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

Самый простой способ настроить работу внутреннего браузера это зайти на внутренний сайт телефона (просто введите IP телефона и дефолтный пароль 456) и на вкладке Settings/Microbrowser вы найдете все необходимые настройки:

SIP

Если ваша модель поддерживает SIP протокол вам открывается масса интересных возможностей.

Большинство телефонов может поддерживает несколько линий. Если у вас мегафон, то на одну линию можно завести номер мобильного телефона, предварительно подключив бесплатную услугу мультифон и переадресацию звонков на телефон и SIP как описано здесь.

Используя тариф без абонентской связи вы получаете условно-бесплатный домашний телефон.

На второй линии у меня заведен мой личный номер мобильного телефона, который используется для исходящих звонков или для приема входящих звонков в случае проблем с сотовым покрытием. Ну а на третью линию можно подключить международного SIP провайдера и иметь за доллар или два номер в США или любой другой стране. Это позволит сэкономить колоссальные деньги на международных звонках. Настройку можно осуществить как через упоминаемый ранее внутренний сайт телефона, так и через прямое редактирование файла конфигурации телефона.

Чтобы выгрузить файл конфигурации зайдите в Utilities/Import-Export configuration в раздел Export.

Выгруженный файл конфигурации содержит все настройки телефона кроме паролей!

Информацию о содержимом файла конфигурации можно найти здесь.

В качестве альтернативы можно использовать свободную линию для подключение к Microsoft Lync серверу для интеграции со Skype For Business.

Интеграция с браузером Chrome

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

Конечно для домашнего использования можно организовать LDAP интеграцию с Google contacts или же загрузить список контактов используя provisioning, но основную проблему с ужасным UX это не исправляет.

Для решения этой проблемы я сделал небольшое расширение для Google chrome, которое позволяет выделить номерна любой страничке и стартовать звонок со стационарного телефона.

Телефоны Polycom поддерживают, так называемые, интеграционные вызовы, когда отправив POST запрос извне на телефон можно заставить его выполнить то или иное действие: Позвонить на указанный номер, перейти в режим Не беспокоить, включить переадресацию, вывести сообщения на экран и т.д. и т.п.

К примеру такой запрос эмулирует нажатие кнопки Status на телефоне:

curl --digest -u Push:Push -d "<PolycomIPPhone><Data priority=\"All\">Key:Status</Data></PolycomIPPhone>" --header "Content-Type: application/x-com-polycom-spipx" -v http://192.168.0.226/push

А такой стартует звонок по указанному номеру на линии 1.:

curl --digest -u Push:Push -d "<PolycomIPPhone><Data priority=\"All\">tel:\\2222222;Line1 </Data></PolycomIPPhone>" --header "Content-Type: application/x-com-polycom-spipx" -v http://192.168.0.226/push

Соответственно все что требуется реализовать в расширении решить нетривиальный вопрос Digest аутентификации в JS, прочитать выделенный текст по вызову из контекстного меню и отправить Post запрос в телефон.

Предварительно необходимо разрешить интеграциионные вызовыв телефоне. Зайдите в раздел Settings/Applications/Push и выберите All в разделе Allow Push Message и не забудьте указать логин и пароль для авторизации вызовов. Без этого рабоать не будет.

В работе это примерно так:

Исходники расширения здесь а само раширение ищите в Google Chrome Extension Store.

Настройка UI телефона

UI Телефона поддается некоторой кастомизации. Кроме замены фона(на ЧБ экране это все равно выглядит ужасно) и отображения web- страниц во встроенном браузере -можно переназначать действие кнопок навигации, предварительно разрешив их переопределение с помощью этих ключей в конфигурации телефона.

feature.enhancedFeatureKeys.enabled="1"

feature.EFKLineKey.enabled="1"

Несколько примеров подобного переопределения:

Открытие странички с погодой во внутреннем браузере телефона:

softkey.1.action="http://personeltest.ru/away/192.168.0.228:88"

softkey.1.enable="1"

softkey.1.label="Инфо"

softkey.1.use.idle="1"

Переход в режим DoNotDesturb

softkey.1.action="Key:DoNotDisturb"

softkey.1.enable="1"

softkey.1.label="DnD"

softkey.1.use.idle="1"

Вызов 1-го контакта из списка быстрого набора

softkey.3.action="$S1$"

softkey.3.enable="1"

softkey.3.label="Такси"

softkey.3.use.idle="1"

Более подробную информацию о переназначении софтверных кнопок можно подчерпнуть здесь.

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

Подробнее..

Погода-бот DialogFlow OpenWeather Python

18.07.2020 00:05:02 | Автор: admin

Постановка задачи


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

DialogFlow


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

Переходим по ссылке https://dialogflow.cloud.google.com/, авторизуемся в своем аккаунте гугл и переходим на страницу создания бота. Нажимаем на Create new agent и вводим имя агенту: weather-bot. Выбираем дефолтный язык русский.

image

Основной объект, с которым работает DialogFlow интенты или намерения. При взаимодействии с ботом всегда срабатывает то или иное намерение, и задача вас как разработчика сопроводить каждое намерение разнообразными тренировочными фразами, чтобы бот каждый раз максимально правильно угадывал тот или иной интент.

Итак, переходим во вкладку Intents. При создании бота автоматически создаются два интента: Default Fallback Intent и Default Welcome Intent. Welcome Intent вызывается тогда, когда происходит запуск бота либо вы пишете ему приветственное сообщение. Fallback вызывается во всех случаях, когда бот не понимает, что вы ему пишете, т.е. во всех случаях, когда ни один другой интент не срабатывает. Оставляем дефолтные интенты без изменений и жмем на Create intent, называя его get-weather. Именно с этим намерением мы и продолжим работать в данной статье.

image

Переходим в наш интент get-weather, затем во вкладку Training phrases и создаем несколько тренировочных фраз, например, таких:

image

Заметим, что DialogFlow автоматически определяет города как параметры location. Это очень удобно, поскольку мы будем передавать эти самые параметры в бэкенд нашего приложения.

В самом DialogFlow осталось сделать совсем немного разрешить ему вебхуки для взаимодействия с бэкендом нашего бота. Для этого листаем в самый низ, разворачиваем вкладку Fulfillment и ставим галочку на Enable webhook call for this intent.

Бэк


Приступим к написанию серверной части нашего бота. Писать будем на Python в связке с Flask. Для получения информации о погоде был выбран OpenWeather API. Зарегистрируйтесь на этом сайте, затем вам на почту придет API KEY он и понадобится в нашем приложении. Кроме того, поскольку информация о погоде в этом API выдается по параметрам latitude и longitude ширина и долгота нам необходимо как-то преобразовывать город в его ширину и долготу. В этом нам поможет Python-библиотека geopy.

Импортируем все необходимое:

from flask import Flask, request, make_response, jsonifyimport requestsimport jsonfrom geopy.geocoders import Nominatim

Создаем Flask application:

app = Flask(__name__)

и вставляем в переменную API_KEY свой API KEY:

API_KEY = '<your_API_KEY_here>'

Пишем роут для пути "/":

@app.route('/')def index():    return 'Hello World!'

и далее функцию results(), в которой и будет осуществлена вся логика программы:

def results():    req = request.get_json(force=True)    action = req.get('queryResult').get('action')    result = req.get("queryResult")    parameters = result.get("parameters")    if parameters.get('location').get('city'):        geolocator = Nominatim(user_agent='weather-bot')        location = geolocator.geocode(parameters.get('location').get('city'))        lat = location.latitude        long = location.longitude        weather_req = requests.get('https://api.openweathermap.org/data/2.5/onecall?lat={}&lon={}&appid={}'.format(lat, long, API_KEY))        current_weather = json.loads(weather_req.text)['current']        temp = round(current_weather['temp'] - 273.15)        feels_like = round(current_weather['feels_like'] - 273.15)        clouds = current_weather['clouds']        wind_speed = current_weather['wind_speed']    return {'fulfillmentText': 'Сейчас температура воздуха - {} градусов, ощущается как {} градусов, облачность - {}%, скорость ветра - {}м/с'.format(str(temp), str(feels_like), str(clouds), str(wind_speed))}

Осталось дописать роут, по которому будет переход в наше приложение, назовем его webhook:

@app.route('/webhook', methods=['GET', 'POST'])def webhook():    return make_response(jsonify(results()))

и запустить приложение:

if __name__ == '__main__':   app.run(debug=True)

Мы справились!

И это все?


Не совсем. Программа лежит на нашей локальной машине, но DialogFlow о ней ничего не знает. Чтобы превратить нашу машину в сервер, который станет доступен в интернете, нужна особая утилита. Этим требованиям соответствует ngrok. Скачиваем ее, запускаем и вводим в консоли следующее: ngrok http 5000. Появится https-ссылка, которую необходимо скопировать и поместить в DialogFlow. Копируем, переходим в Fulfillment в DialogFlow, ставим Webhook в состояние enabled и вставляем в получившееся поле ссылку. Дописываем роут, т.е. "/webhook". Должно получиться что-то похожее на следующее:

image

Теперь запускаем наше Python-приложение. Осталось совсем немного подключить интеграцию с Telegram. Переходим на вкладку Integrations, выбираем телеграм, далее следуем инструкции по получению токена, вставляем токен, и вуаля приложение готово! Остается его протестировать:

image

Надеюсь, данная статья была вам полезна и сподвигнет на собственные эксперименты в этой области. Код проекта доступен по ссылке.
Подробнее..
Категории: Python , Dialogflow , Weather api , Flask

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru