Erstellen Sie einen Bot für Skype. Schritt für Schritt durch die REST-API und in Python

  • Tutorial

Bei der Suche nach Langzeitabfragen in der Skype-API

Vor einem Jahr hat Microsoft eine Plattform zum Erstellen von Bots für Skype eingeführt. Die Plattform bietet ein praktisches Nachrichtenformat, Sie können Karten mit Tasten senden, wie in einem Telegramm, mit einem Wort, alles sieht sehr cool aus.

Vor kurzem musste ich einen Bot für Skype schreiben. Und trotz der Tatsache, dass das Thema ( zum Beispiel ) auf einem Hub angesprochen wurde , stieß ich auf einige Schwierigkeiten. Es fehlte mir wirklich eine Schritt-für-Schritt-Anleitung für die Arbeit mit der REST-API.

Tatsächlich ist der Skype-Bot ziemlich schnell geschrieben, wenn Sie die Fallstricke kennen und wissen, wosiehe die Dokumentation. Die Hauptidee, die ich lernen musste: Keine Web-Umfrage. Wenn ein Telegramm Ihrer Wahl lange Abfragen und Webhooks bietet, wird Skype nur von Webhooks umgangen. Die folgenden Probleme ergeben sich daraus: Die Kommunikation mit Skype-Servern erfolgt nur über https und nur mit einem gültigen Zertifikat. Sie müssen einen Domainnamen finden, Hosting, mit einem Zertifikat belästigen.

Wie kann man das machen?


Also von Anfang an. Nehmen wir an, wir haben nacktes Hosting (ich hatte es Raspberry Pi, auf dem ich den Bot getestet habe, aber es kann zum Beispiel auch ein Server bei Amazon sein). Zunächst müssen Sie einen Domainnamen und ein Zertifikat dafür erhalten. Kostenlose Domainnamen erhalten Sie beispielsweise hier . Als nächstes benötigen wir ein Zertifikat für diesen Namen. Dies ist am einfachsten mit Let's Encrypt zu tun . Wählen Sie bei der Installation des Zertifikats die Option "Standalone-Server" aus. Certbot startet seinen Server, um zu überprüfen, ob Sie diesen Domänennamen besitzen, bevor Sie ein Zertifikat dafür ausstellen. Nachdem Sie erfolgreich waren, sollten Sie Zertifikate im Ordner "/ etc / letsencrypt / archive" haben.

Jetzt, da alles für die Arbeit bereit ist, werden wir mit dem Schreiben des Bots beginnen.

1.In diesem Artikel wurde viel beschrieben , wir brauchen zwei Punkte: Hier erstellen wir unsere Anwendung und hier registrieren wir den Bot. Bei der Registrierung müssen Sie den Endpunkt angeben, an den Microsoft Nachrichten senden soll. Es wird in der gleichen Form angezeigt, wie es im Browser geschrieben wurde. Nach dem Endpunkt können Sie einen Port angeben. Dieser sieht dann folgendermaßen aus: "https: // endpoint_url: port" Nach der Registrierung müssen Sie ein Kennwort generieren. Das ist alles, was wir im Moment benötigen. Im Moment sollten wir haben: application_id (mit der wir den Bot registriert haben) und Passwort (das wir gerade erhalten haben).

2.Sie haben Webhooks nicht vergessen? Es ist Zeit, den Server zu erhöhen, für den wir zuvor Zertifikate erhalten haben. Auf Python ist dafür eine Flasche geeignet. Zunächst definieren wir globale Variablen (keine sehr schöne, aber sehr einfache Lösung) und beginnen automatisch, das Token in einem separaten Stream zu empfangen und zu aktualisieren:

Code anzeigen
FLASK = Flask(__name__)
APP_ID = ''
PASSWORD = '' # секрет от бота
context =('fullchain.pem', 'privkey.pem') # относительные или абсолютные пути к файлам, которые сгенерировал certbot
TOKEN = {}
def get_token():
    global TOKEN
    url = 'https://login.microsoftonline.com/botframework.com/oauth2/v2.0/token'
    payload = {'grant_type': 'client_credentials',
               'client_id': APP_ID,
               'client_secret': PASSWORD,
               'scope': 'https://api.botframework.com/.default',
              }
    token = requests.post('https://login.microsoftonline.com/botframework.com/oauth2/v2.0/token', data=payload).content
    TOKEN = json.loads(str(token)[2:-1])
    return json.loads(str(token)[2:-1])
def send_token_to_connector(token):
    url = 'https://groupme.botframework.com/v3/conversations'
    headers = {'Authorization': 'Bearer ' + token}
    r = requests.post(url, headers=headers)
    return r
def get_and_verify_token():
    global TOKEN
    while True:
        get_token()
        send_token_to_connector(TOKEN['access_token'])
        time.sleep(TOKEN['expires_in']*0.9)


3. Wir werden eine Handlerfunktion für eingehende Nachrichten schreiben:

Code anzeigen
@FLASK.route('/', methods=['GET', 'POST'])
def handle():
    data = request.get_json()
    talk_id = data['conversation']['id']
    msg = {
        "type": "message",
        "from": {
                "id": APP_ID,
                "name": "habraechobot"
            },
        "conversation": {
            "id": talk_id,
        },
        "text": data['text'],
    }
    url = data['serviceUrl'] + '/v3/conversations/{}/activities/'.format(data['conversation']['id'])
    headers = {'Authorization': 'Bearer ' + TOKEN['access_token'],
               'content-type': 'application/json; charset=utf8'}
    r = requests.post(url, headers=headers, data=json.dumps(msg))
    return 'success'


4. Und schließlich starten Sie den Server:

Code anzeigen
if __name__ == '__main__':
    thread = Thread( target=get_and_verify_token )
    thread.start()
    FLASK.run(host='0.0.0.0', port=8080, ssl_context=context)


Das ist alles - der vollständige Bot-Code kann von hier übernommen werden . Ich hoffe, mein Artikel war nützlich und spart jemandem Zeit und Mühe.

Jetzt auch beliebt: