Сохраняем избранные фото. Что такое АПИ

Сохраняем избранные фото. Что такое АПИ

05.04.2019

Отмазка #1
Эта публикация - не готовое решение, а лишь небольшой пример, иллюстрирующий расширение возможностей 1С и преимущества знания других языков программирования.

Отмазка #2
Код примеров приведён в минимально рабочее состояние. Ровно настолько, чтобы продемонстрировать саму возможность рассылки сообщений по WhatsApp из 1С.
В нём есть участки, в которых сознательно оставлена возможность для некорректной работы (отсутствие проверок, отсутствие перехвата исключений и т.д.).
Так же реализована очень малая часть потенциала API - только отправка текстовых сообщений.
Мотивирую это тем, что не хочу давать готовый инструмент в руки спамеров.

Предисловие

Если попытаться поискать официальный API WhatsApp, то можно узнать, что его не существует.
Однако задав в поиске "WhatsApp" на github можно найти 421 (в день написания публикации) проект на различных языках.

Я решил остановиться на проекте WhatsAPINet (https://github.com/perezdidac/WhatsAPINet). Этот проект содержит в себе API и демонстрацию его применения.

Казалось бы - как можно связать DLL на.Net с 1С?
Можно сделать внешнюю компоненту и использовать в своей конфигурации - мы этого делать не будем, потому что написание внешней компоненты всё-таки сложнее, чем переделка проекта под COM-объект, не будем усложнять наш пример.
Можно переделать проект так, чтобы на выходе DLL поставляла помимо экспортных методов ещё и COM-объект, который можно применять не только в 1С, но и в других отраслях (vbs-скрипты и прочее).

Скачав проект с github можно неприятно удивиться - тестовые примеры не будут работать.
Сервер Whatsapp будет ругаться на несоответствие версий, неправильный токен авторизации и так далее.
Это связано с тем, что какие-то участки протокола могут измениться в новой версии WhatsApp, а проект на github уже давненько не обновлялся.


Пилим COM-объект на C#

Где и что конкретно нужно исправить в проекте, чтобы заработали тестовые примеры я подробно расписывать не буду (смотри отмазку #2), скажу только, что нужно поправить 2 строки - версию и один из ключей, который берётся для генерации токена.
На момент публикации статьи этих исправлений будет достаточно, чтобы сервер WhatsApp был согласен с нами сотрудничать.

Готовых статей о том как написать COM-объект на.NET море, в том числе на инфостарте, поэтому не будем сильно останавливаться на этом вопросе
(например, )

Итак, из трёх папок в скаченном проекте нас интересует папка WhatsAppApi - в неё содержится проект с реализацией API, остальные папки содержат примеры по работе с ним.

1. Сделаем сборку видимой для COM:

Откроем файл AssemblyInfo.cs и изменим значение параметра сборки ComVisible на true

2. Добавим описание и реализацию интерфейсов

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

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

Добавим класс ComWrapper. Он будет наследовать IComWrapper, содержать реализацию его методов, а так же вызывать события.

3. Компилируем проект и регистрируем нашу сборку как COM

Средство регистрации сборки считывает метаданные сборки и добавляет в реестр необходимые записи, что позволяет COM-клиентам прозрачно создавать классы.NET Framework. После регистрации класса любой COM-клиент может использовать таким образом, словно это класс COM. Класс регистрируется только один раз, при установке сборки. Экземпляры классов внутри сборки не могут создаваться на основе COM-классов до их фактической регистрации.

Чтобы зарегистрировать нашу сборку, нужно выполнить следующий Код
c:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe WhatsAppApi.dll /codebase

Во вложениях есть допиленный проект со скромным функционалом (с учётом отмазки #2) и готовая скомпилированная DLL

Пилим обработку в 1С

Вот основная часть работы позади, нам осталось только прикрутить полученный COM-объект к 1С.

В исходном проекте многое завязано на событиях объекта, поэтому мы тоже не будем далеко уходить от этой практики.
Так как мы использовали интерфейс IEvent, основная часть вопросов будет решаться добавлением обработчиков событий COM-объекта.

Чтобы приступить к тестам, нам нужно зарегистрировать номер телефона в WhatsApp, получить пароль и авторизоваться. Но, перед этим, посмотрим, как мы будем работать с COM-объектом (сборка, на этом этапе, уже должна быть зарегистрирована):

&НаКлиенте Процедура ПриОткрытии(Отказ) Вацап = Новый COMОбъект("WhatsAppApi.ComWrapper"); ДобавитьОбработчик Вацап.onGetMessage, ПолученоСообщение; КонецПроцедуры... &НаКлиенте Процедура ПолученоСообщение(ОтНомера, Имя, Текст) НовоеСообщение = Сообщения.Добавить(); НовоеСообщение.Дата = ТекущаяДата(); НовоеСообщение.От = ОтНомера; НовоеСообщение.Кому = "Мне"; НовоеСообщение.Текст = Текст; НовоеСообщение.Доставлено = Истина; КонецПроцедуры

Механизм регистрации

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

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

2. Сервер WhatsApp отправляет на указанный номер смс с кодом.

Тут нам пригодится телефон, смотрим, что за цифры пришли в смс сообщении.

3. Называем серверу полученные в смс цифры.

4. Сервер выдаёт нам пароль, который мы будем использовать для авторизации.

В коде 1С это выглядит приблизительно так:

&НаКлиенте Процедура ПриОткрытии(Отказ) Вацап = ЭтаФорма.ВладелецФормы.Вацап(); ДобавитьОбработчик Вацап.onRecievePassword, ПриПолученииПароля; КонецПроцедуры &НаКлиенте Процедура ЗапроситьСМС(Команда) Вацап.Create(НомерТелефона, "", ""); Если Вацап.RequestCode() Тогда Сообщить("Запрос отправлен, ожидайте СМС сообщение"); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ОтправитьКод(Команда) Вацап.RegisterCode(КодСМС); КонецПроцедуры &НаКлиенте Процедура ПриПолученииПароля(Строка) Предупреждение("Пароль получен!"); Пароль = Строка; КонецПроцедуры &НаКлиенте Процедура ПриЗакрытии() УдалитьОбработчик Вацап.onRecievePassword, ПриПолученииПароля; КонецПроцедуры

Процесс обмена сообщениями выглядит так:

1. Отправитель отправляет на сервер сообщение для указанного получателя
2. Сервер, получив сообщение, отчитывается отправителю о том, что сообщение получено сервером
3. Когда получатель получает сообщение, сервер отчитывается отправителю, что сообщение доставлено получателю

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

В коде 1С наше общение будет выглядить так:

&НаКлиенте Перем Вацап, МойНомерТелефона; &НаКлиенте Функция Вацап() Экспорт Если Вацап = Неопределено ИЛИ Вацап = null Тогда Вацап = Новый COMОбъект("WhatsAppApi.ComWrapper"); КонецЕсли; Возврат Вацап; КонецФункции &НаКлиенте Процедура ПриОткрытии(Отказ) ФормаАвторизации = ПолучитьФорму("ВнешняяОбработка.ДемонстрацияWhatsApp.Форма.ФормаАвторизации", ЭтаФорма); ФормаАвторизации.ОткрытьМодально(); Если НЕ ФормаАвторизации.Авторизован Тогда МойНомерТелефона = ФормаАвторизации.НомерТелефона; Закрыть(); Возврат; КонецЕсли; ДобавитьОбработчик Вацап.onError, ПриОшибке; ДобавитьОбработчик Вацап.onGetMessage, ПолученоСообщение; ДобавитьОбработчик Вацап.onClientRecieveMessage, Доставлено; КонецПроцедуры &НаКлиенте Процедура ПолученоСообщение(ОтНомера, Имя, Текст) НовоеСообщение = Сообщения.Добавить(); НовоеСообщение.Дата = ТекущаяДата(); НовоеСообщение.От = ОтНомера; НовоеСообщение.Кому = "Мне"; НовоеСообщение.Текст = Текст; НовоеСообщение.Доставлено = Истина; КонецПроцедуры &НаКлиенте Процедура ОтправитьСообщение(Команда) КлючСообщения = Вацап().SengMessage(Адресат, Сообщение); НовоеСообщение = Сообщения.Добавить(); НовоеСообщение.Дата = ТекущаяДата(); НовоеСообщение.От = "Я"; НовоеСообщение.Кому = Адресат; НовоеСообщение.Текст = Сообщение; НовоеСообщение.КлючСообщения = КлючСообщения; Сообщение = ""; КонецПроцедуры &НаКлиенте Процедура Доставлено(Кому, КлючСообщения) Отбор = Новый Структура("Кому, КлючСообщения", Кому, КлючСообщения); НайденныеСтроки = Сообщения.НайтиСтроки(Отбор); Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл НайденнаяСтрока.Доставлено = Истина; КонецЦикла; КонецПроцедуры

На этом можно закончить, добавив, что допилив наш пример можно отправлять не только простые текстовые сообщения, но так же заставить бота отписываться в группах, кидать фотки с web-камеры по расписанию, записи с микрофона и вообще создать гаджет агента 007)

API является сокращением от A pplication P rogramming I nterface. Данным термином обозначается набор инструкций для какой-либо программы или приложения, с помощью которого возможно его или ее встраивание в другое ПО.

Если говорить относительно мессенджера WhatsApp, API позволяет интегрировать функцию пересылки сообщений в софт или даже Интернет-ресурс. Однако официальную поддержку открытых решений разработчики приложения не оказывают. Более того, они выступают против сторонних разработок в этой области. Объясняется это стремлением к защищенности приложения.

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

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

Шлюз

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

Как уже сказано в тексте ранее, разработчики Вотсапа не имеют планов по публикации инструкций для подобного рода взаимодействий. Однако такие функции предоставляют сторонние сервисы (чаще всего - небесплатно). Проще всего их найти в интернете по поисковому запросу WhatsApp Gateway или его вариациям.

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

Зимой 2014 года компания Вацап свернула некоторые, связанные с их софтом, программные проекты из-за нарушения авторских прав. Для разработок на основе платформы программы Whatsapp API закрыт.

Что такое АПИ?

API, то есть Application (приложение) Programming (программирование) Interface (интерфейс), вместе - интерфейс программирования приложений. По своей внутренней сути АПИ представляет собой набор разных «инструментов» для использования с другими программными продуктами в целях интеграции в тот объект, API которого используют. В набор таких инструментов входят такие элементы, как процедуры, классы, другие части программ, с участием которых можно программировать дополнительные приложения.

Немного из истории Вацапа...

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

До этого имелись программы, написанные «под» Вацап и «для» Вацап, точнее для его улучшения под свои личные (рабочие) цели (например, для рассылки по сотрудникам информации). После ужесточения мер по безопасности руководство Вацапа потребовало закрыть несколько таких разработок улучшенных, измененных Вотсап-клиентов и приложений к ним. По некоторым данным, их число достигало тридцати пяти штук.

Как происходила интеграция с другими сервисами?

Чтобы написать и связать с Ватсапом и его возможностями другое приложение, причем так, чтобы оно работало бы в тандеме с известным мессенджером, data5 использовали данные библиотеки WHAnonymous/Chat API. Нужно заметить, что при этом на телефоне пользователь просто «вылетал» из программы. Что касается веб-скрипта, его пытались также пустить в ход, но оказалось, что он требует слишком много внимания в обслуживании.

В 2016 году версия для доступа к мессенджеру через сайт, открытый в интернет-браузере, то есть веб-версия уже работала на платформе стандарта Data5, но с использованием симулятора браузера через прокси. Благодаря этому возможно было получение API, который позволял сделать просмотр собеседников в чате Ватсапа.

Вацап и АПИ

У мессенджера закрыт какой-либо доступ со стороны иных приложений, поэтому подключение альтернативных клиентов и приложений к нему, которые могли быть сделаны при помощи доступа к АПИ WhatsApp, не будет. Вот, например, пару лет назад, Ватсап купили, причем покупателем выступил Фейсбук. Тогда произошло изменение в политике компании. Теперь она стала агрессивной по отношению к тем программистам, которые используют (реализуют) в своих наработках протокол WhatsApp.

Для чего применяли API? Одним из вариантов использования возможного доступа к «рычагам» управления и рычагам интеграции Вотсапа является массовая рассылка каких-либо сообщений. Это предполагалось производить при помощи программ двух видов: кликеров и неклиеров. Первый вид уже немного устарел, так как более прогрессивными и действенными считаются не кликеры.

Пока АПИ Вацапа был доступен, активно «писались» программы и делались рассылки на его основе. Когда политика руководства WhatsApp изменилась (ужесточилась), претензии получили проекты ГитХаб, OpenWhatsapp. В первом были закрыты около тридцати-сорока репозитариев. Это только для начала... И несмотря на рассказы Тарика Галала, который и занимается таким благородным делом, как распространение понравившегося сервиса на любые устройства, под которые не были написаны версии изначально, юристы Вацап Инкорпорейтед не желают разрешать кому-то использование своего АПИ.

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

Они пригодятся для комфортного общения.

Мессенджер с многомиллионной аудиторией хранит немало секретов и неочевидных функций, которые иногда так нужны. Давайте разберемся, что еще скрывает приложение WhatsApp.

Сохраняем избранные фото

По умолчанию WhatsApp сохраняет все фотографии в Галерею iPhone, которые приходят во время переписки. И если ваш собеседник любит обмениваться новыми снимками, есть риск, что память устройства очень скоро окажется заполненной. Чтобы это не случилось, отключите автосохранение фотографий.

Как отключить : Откройте Настройки – Чаты Медиа .

Отправка текущей геопозиции

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

Статус сообщения и точная история доставки

В мессенджере WhatsApp предусмотрено оповещение Об отправке , О доставке и О прочтении сообщения. Одна «птичка» – сообщение отправлено, вторая – доставлено, две птички синего цвета – сообщения прочитано.

Чтобы увидеть точное время доставки и прочтения достаточно коснуться конкретного сообщения и потянуть его справа налево. Откроется подробная история статусов.

Отключение оповещения о прочтении

Если вы не хотите, чтобы собеседник видел, что вы прочли сообщения, но не отвечаете на него, нужно отключить оповещение о прочтении.

Сделать это просто: откройте Настройки – Учетная запись – Конфиденциальность и отключите ползунок напротив пункта Отчеты о прочтении .

Отключение последнего времени входа

В WhatsApp можно отключить и еще один важный пункт – отображение точного времени входа в приложение . Каждый раз, когда вы запускаете WhatsApp, обновляется статус «был(-а) вчера в 00:00». При желании, это можно отключить.

Как отключить : Откройте Настройки – Учетная запись – Был (-а) и выберите Никто . При этом видеть, кто и когда заходил в мессенджер среди ваших контактов вы по-прежнему сможете.

Как отключить оповещения от пользователя

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

Как отключить : Откройте окно диалога с пользователем и тапните по его имени. Выберите пункт Не беспокоить и выберите время, в течение которого вы не будете получать уведомления: 8 часов, 1 неделя или год.

Сколько памяти съел WhatsApp

Постоянный обмен сообщениями, фотографиями и медийным контентом превращает WhatsApp в настоящего прожору, главным лакомством которого становится память вашего смартфона.

Где узнать состояние памяти : Откройте Настройки – Учетная запись – Хранилище и тапните по вкладке Объем . В строек Общий объем отобразится общий размер занимаемого приложением пространства.

Как удалить сообщения

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

Как сделать : Откройте диалог и, тапнув по любому сообщению, удерживайте палец до появления контекстного меню. Выберите Удалить и пометьте те сообщения, с которыми готовы попрощаться. После выбора нажмите на пиктограмму корзины. Радикальный способ очистки – Удалить все .

Как удалить все диалоги

Активные пользователи WhatsApp знают, что десятки диалогов из удобного инструмента общения рано или поздно превращаются в настоящую проблему. Есть возможность удалить все диалоги разом.

Как сделать : Откройте вкладку Чаты . В верхнем левом углу выберите Изменить и тапните по пункту Удалить все . Потребуется указать ваш номер телефона для подтверждения.

WhatsApp на компьютере

Разработчики мессенджера категорически отказываются выпускать полноценное автономное приложение WhatsApp для настольных ПК. В качестве альтернативы предлагается веб-версия клиента, которая работает по адресу web.whatsapp.com .

Как включить : Откройте страницу web.whatsapp.com с компьютера. Увидев QR-код, откройте WhatsApp на смартфон и передите в Настройки – WhatsApp Web – Сканировать QR-код . Наведите камеру смартфона на QR-код, отображаемый на экране компьютера или ноутбука. Вход будет выполнен немедленно.

Форматирование сообщений

Неочевидная возможность, но вы можете использовать несколько стиле форматирования при отправке сообщений. Курсив , жирный и зачеркнутый

Как сделать : Слово, которое хотите выделите курсивом , выделите двух сторон символом «_». Для выделения жирным , также заключите слово в «*». Для зачеркивания используйте символ «~».

сайт Они пригодятся для комфортного общения. Мессенджер с многомиллионной аудиторией хранит немало секретов и неочевидных функций, которые иногда так нужны. Давайте разберемся, что еще скрывает приложение WhatsApp. Сохраняем избранные фото По умолчанию WhatsApp сохраняет все фотографии в Галерею iPhone, которые приходят во время переписки. И если ваш собеседник любит обмениваться новыми снимками, есть риск, что память...
  • Настройка Linux ,
  • Системное администрирование
    • Tutorial

    Достаточно много видел примеров использования whatsapp-уведомлений с zabbix, и другими системами мониторинга, но на собственные эксперименты с whatsapp меня вдохновила . Однако если с системами мониторинга все ясно, то при наличии прекрасной «врожденной» системы email-оповещений, городить огород ради одной bacula было откровенно лень. Да и вдруг, потом захочется поставить zabbix или еще что-то куда-то послать? Каждому боту по ватсапу?
    Так что, пусть это будет что-то более универсальное. Например, отдельный сервер, который сможет обслужить bacula, zabbix, syslog-сервер, сайт или даже виндоусы с макинтошами.

    UPD: Сразу оговорюсь, что задачи «наиболее простым путем отправить произвольное сообщение на телефон» не стояло, так как есть джаббер, смс, любой мобильный email-клиент, наконец. Задача была: а) приспособить именно whatsapp, так как он уже есть в моем телефоне и еще около 1 млрд других, в отличие от того же пресловутого telegram б) сделать как можно более универсальный шлюз, с которого можно быстро перенаправить рассылку хоть куда, а то и дублировать.

    Приступим. Я ставил на «пустой» Centos 7 amdx64 в lxc-контейнер под proxmox ve 4.4.

    Первое, что обычно делаю - обновляю, подключаю epel и ставлю ssh, чтобы потом удобно работать

    Yum -y update yum -y install epel-release openssh-server systemctl enable sshd systemctl start sshd
    Далее ставим зависимости и yowsup :

    Yum -y install unzip wget tar nano yum -y install python python-dateutil python-argparse yum -y install libtiff-devel libjpeg-devel libzip-devel freetype-devel lcms2-devel yum -y install gcc yum -y install protobuf pycrypto python-axolotl-curve25519 yum -y install python-devel python-pip python-imaging pip install --upgrade pip
    Скачиваем, распаковываем и устанавливаем yowsup:

    Cd /usr/src/ wget https://github.com/tgalal/yowsup/archive/master.zip unzip master cd yowsup-master/ python setup.py install
    Регистрируем номер мобильного. Симка вставлена в мобильник (или шлюз, в моем случае) на который придет смс. Номер не должен быть засвечен в whatsapp. Сначала запрашиваем код регистрации:

    Yowsup-cli registration --requestcode sms --phone 7xxxxxxxxxx --cc 7 --mcc 250 --mnc xx --env android

    phone - ваш номер телефона, начинающийся с 7
    cc - country code - это код страны (для России это 7)
    mcc - mobile country code - это другой код страны (для России это 250)
    mnc - mobile network code - это код вашего оператора. (01 - МТС, 02 - мегафон, 20 - теле2, 99 - билайн)

    В ответ придет смс с кодом вида XXX-XXX, который используем для подтверждения регистрации

    Yowsup-cli registration --register xxx-xxx --phone 7хххxxxxxxx --cc 7
    Сервер сообщит об удачной регистрации:

    status: ok
    kind: free
    pw: X1isWwe+25d/aOXJpcSduzTV7fg=
    price: 33,00 руб.
    price_expiration: 1495380655
    currency: RUB
    cost: 33.00
    expiration: 4444444444.0
    login: 7хххххххххх X1isWwe+37d/aOXJpcSduzTV7fg=
    type: new

    Записываем пароль из переменной pw в конфиг-файл

    Nano yowsup-cli.config
    В этом файле три строчки (страна, номер, пароль):

    Cc=7 phone=7хххxxxxxxx password=X1isWwe+25d/aOXJpcSduzTV7fg=
    Собственно, все. Пробуем

    Yowsup-cli demos -c yowsup-cli.config -s 7хххххххххх "alarm"
    Если сообщение пришло, двигаемся дальше. Чтобы комфортно побаловаться живым whatsapp-чатом из терминала - нужна кириллица. Если ее нет, а вместо нее ошибки вида «ascii … ordinal not in range(128)» - надо поставить локаль и поправить один файл.

    С localectl в моем сетапе какие-то проблемы, поэтому:

    Nano /etc/locale.conf
    пишем LANG=ru_RU.UTF-8 , сохраняем и рестартуем сессию

    Следующим шагом надо поправить кодировку yowsup. Делаем, как сказано .

    Nano /usr/lib/python2.7/site-packages/yowsup2-2.5.2-py2.7.egg/yowsup/demos/cli/layer.py
    После строки import sys добавить:

    Reload(sys) sys.setdefaultencoding("utf8")
    должно получиться:

    From .cli import Cli, clicmd from yowsup.layers.interface import YowInterfaceLayer, ProtocolEntityCallback from yowsup.layers.auth import YowAuthenticationProtocolLayer from yowsup.layers import YowLayerEvent, EventCallback from yowsup.layers.network import YowNetworkLayer import sys reload(sys) sys.setdefaultencoding("utf8")
    Теперь можно запускать живой чат и слать-принимать сообщения кириллицей. Have fun.

    Наигравшись вдоволь, пора приспособить этот прекрасный инструмент для нужд трудящихся вокруг серверов. Для этого было решено использовать достаточно простой и гибкий инструмент Webhook github.com/adnanh/webhook , хотя есть и масса других способов. Например shell2http github.com/msoap/shell2http .

    Скачиваем и распаковываем webhook в любой каталог. Я для удобства положил в /var/webhook

    Cd /usr/src wget https://github.com/adnanh/webhook/releases/download/2.6.3/webhook-linux-amd64.tar.gz tar -xvf webhook-linux-amd64.tar.gz -C /var mv /var/webhook-linux-amd64 /var/webhook
    А чтобы потом, при желании, было удобнее добавлять всякие файлы-картинки-видео - так же скопировал yowsup-cli.config в /var/yowsup Как говорится, пусть все будет через одно место.

    Mkdir /var/yowsup cp /usr/src/yowsup-master/yowsup-cli.config /var/yowsup
    Поскольку Webhook позволяет запускать через http заранее подготовленные команды - создадим файл с правилами hooks.json .

    Cd /var/webhook​​​​​ nano hooks.json
    В файле опишем хук, который будет принимать команды по адресу http://адрес сервера:9000/hooks/wp-admin , обрабатывать и слать сообщения на whatsapp админа. Внутрь файла добавляем описание условий:

    [ { "id": "wp-admin", "execute-command": "/var/webhook/admin.sh", "command-working-directory": "/var/webhook", "pass-arguments-to-command": [ { "source": "url", "name": "msg" } ] } ]
    То есть, каждый, кто вызовет url http://адрес сервера:9000/hooks/wp-admin?msg=привет - исполнит скрипт /var/webhook/admin.sh , а тот, в свою очередь, отправит привет админу на whatsupp, и только ему. Я решил не передавать каждый раз пару телефон-сообщение, а при необходимости рассылки на другие номера создать дополнительные хуки. Например, хук с отправкой определенному контакт-листу или универсальный с парой телефон-сообщение и каким-то токеном для вящей безопасности.

    Итак, проверяем, правильно ли мы написали хук, запуском:

    ./webhook -hooks hooks.json -verbose
    В ответ увидим:

    2017/04/26 05:12:48 version 2.6.3 starting
    2017/04/26 05:12:48 setting up os signal watcher
    2017/04/26 05:12:48 attempting to load hooks from hooks.json
    2017/04/26 05:12:48 found 1 hook(s) in file
    2017/04/26 05:12:48 loaded: wp-admin
    2017/04/26 05:12:48 serving hooks on 0.0.0.0 :9000/hooks/{id}

    Далее, создаем скрипт отправки /var/webhook/admin.sh, который будет отсылать сообщения админу:

    #! /bin/bash msg="$(echo "$*" | tr " " " ")" if [[ ! -z "${msg/ //}" ]]; then /usr/bin/yowsup-cli demos -c /var/yowsup/yowsup-cli.config -s 7xxxxxxxxxx "$msg" fi
    Добавлена проверка на пустоту и пробелы, чтобы при любом вызове хука не приходили пустые сообщения.

    Открываем в браузере http://адрес сервера:9000/hooks/wp-admin?msg=привет. Все должно работать. Добавляем хук в автозагрузку. Я сделал через systemd .

    Nano /etc/systemd/system/webhook.service
    Описываем юнит:

    Description=Webhook After=syslog.target After=network.target Type=simple PIDFile=/var/webhook/webhook-service.pid WorkingDirectory=/var/webhook User=root Group=root OOMScoreAdjust=-500 ExecStart=/var/webhook/webhook -hooks hooks.json -verbose ExecStop=/usr/bin/pkill -f webhook ExecReload= TimeoutSec=300 WantedBy=multi-user.target
    Сохраняем. Запускаем. Проверяем.

    Systemctl enable webhook systemctl start webhook systemctl -l status webhook
    Теперь можно сделать простую отправку средствами curl с другой машины

    Curl -G http://адрес сервера:9000/hooks/wp-admin?msg=привет
    Однако, так можно слать лишь скучные сообщения без форматирования, похожие на sms. Чтобы получать красиво отформатированные сообщения, да еще и с emoji-графикой нужно предварительно кодировать содержимое msg в urlencode. Иначе в url попадут esc-последовательности. Это пригодится и для дальнейшего примера с Bacula.

    Сurl умеет делать urlencode самостоятельно, только синтаксис будет иным. Например, отправим сообщение с переводом строки:

    Export VAR="привет\nбуфет" export MSG=$(echo -e $VAR) curl -G http://адрес сервера:9000/hooks/wp-admin --data-urlencode msg="$MSG"
    Теперь можно заняться bacula, т.е. тем, что, собственно, и сподвигло на вышеописанные пляски Идем на сервер, где установлен bacula-director, ставим bc и curl.

    Yum -y install bc curl
    Потом берем прекрасный скрипт из статьи bacula.us/sending-notification-whatsapp и немного подправляем. Внимание, если хотим использовать смайлики emoji, то файл должен быть в UTF-8.

    Из секции Variables удаляем RECIPIENT_NUMBER и CONF, они нам не понадобятся. А переменную YOWSEXEC изменяем на curl-вызов хука отправки админу.

    # Variables HOUR=$(date +%d/%m/%Y\ %H:%M:%S) YOWSEXEC="curl -G http://ваш сервер:9000/hooks/wp-admin" LOG="/var/log/bacula/whatsapp.log"
    Вводим свои данные для подключения к MySQL

    # MySQL config DBUSER="bacula" DBPASSWORD="bacula" DBNAME="bacula"
    И вместо строки отправки:

    $YOWSEXEC demos --config $CONF --send $RECIPIENT_NUMBER "`echo -e "$MESSAGE${COUNT}"`" &>> $LOG
    пишем:

    FMSG=`echo -e "$MESSAGE${COUNT}"` $YOWSEXEC --data-urlencode msg="$FMSG" &>> $LOG
    Ставим права на исполнение:

    Chmod +x /etc/bacula/send_whatsapp.sh
    Готово. Теперь, как указано в статье, можно вставлять в задания

    Command = "/etc/bacula/send_whatsapp.sh %i"
    и получать на телефон красивые отчеты:

    Всем спасибо. Буду благодарен за комментарии и поправки.

    UPD(12.01.2018): Yousup обновили до 2.5.7, баги поправили. Если у кого не работает - обновить yowsup, при регистрации использовать --env android (поправил выше).

    Теги:

    • whatsapp
    • yowsup
    • webhook
    • bacula
    Добавить метки

    © 2024 beasthackerz.ru - Браузеры. Аудио. Жесткий диск. Программы. Локальная сеть. Windows