Необходимо написать программу на Python для отправления сообщений в чат Skype. Skype4Py не подходит из-за того, что стоит 64-битный Python.
Существуют ли какие-либо альтернативы для работы со Skype, помимо Skype4Py, и есть ли Skype API для отправки сообщений?
Ответ
Скайп-бот может послать сообщение, используя REST API
POST /v2/conversations/8:alice/activities HTTP/1.1
Host: apis.skype.com
Authorization: Bearer
например чтобы послать message строку skypeid пользователю на Питоне:
#!/usr/bin/env python2
import json
from urllib2 import urlopen, Request
def send_message(message, skypeid, token, host='apis.skype.com'):
url = 'https://{host}/v2/conversations/8:{skypeid}/activities'.format(**vars())
headers = dict(Authorization='Bearer ' + token)
data = json.dumps(dict(message=dict(content=message))).encode()
urlopen(Request(url, data, headers)).close()
где token можно получить с помощью другого http POST запроса:
from urllib import urlencode
def get_access_token(client_id, client_secret):
# from messaging/auth-service.js in skype-sdk
# NOTE: unlike the documented way in /skype/bots/docs/;
# this approach works for me
url = 'https://login.microsoftonline.com/common/oauth2/v2.0/token'
data = urlencode(dict(client_id=client_id,
scope='https://graph.microsoft.com/.default',
grant_type='client_credentials',
client_secret=client_secret)).encode()
return json.loads(urlopen(url, data).read().decode())['access_token']
access_token можно кэшировать expires_in секунд.
Чтобы получить client_id, client_secret необходимо зарегистрировать приложение со своей microsoft учётной записью и создать пароль
Затем сам Skype бот нужно также зарегистрировать, чтобы получить ссылку, по которой можно добавить бота в Skype-контакты (до публикации бота, по этой ссылке его можно найти).
Чтобы получить ответные сообщения нужно указать при создании Skype бота https webhook. Для теста, можно ngrok http 8000 использовать, который напечает url, который можно как публичный webhook указать. При этом достаточно локально http (не https) сервер запустить, который json может принимать, на указанном 8000 порту, например:
#!/usr/bin/env python3
from aiohttp import web # $ pip install aiohttp
async def handle(request):
messages = await request.json()
for message in messages:
print(message)
return web.HTTPCreated() # 201
app = web.Application()
app.router.add_route('POST', '/v1/chat', handle)
web.run_app(app, host='localhost', port=8000, ssl_context=None)
В тему статья на Хабрахабр: Как создать своего бота для Skype. Что не написано в документации
Комментариев нет:
Отправить комментарий