Cisco Spark verfügt über eine Bot-Funktion. Anstatt eine Person zu erwähnen und mit ihr zu sprechen, versteht der Bot, wenn Sie einen Bot erwähnen und mit ihm sprechen, ihn als Befehl, verarbeitet ihn und gibt die resultierende Nachricht zurück (tatsächlich leitet der Bot nur weiter und die eigentliche Verarbeitung ist abgeschlossen. Ein anderes Programm tut).
Es hängt von der Idee ab, welche Art von Verarbeitung durchgeführt wird und welche Art von Ergebnis zurückgegeben wird. Der einfachste Vorgang besteht darin, einen Bot zu erstellen, der auf die Nachricht Ping mit Pong reagiert. Für den eigentlichen Verarbeitungsteil wird das AWS Lambda + Amazon API-Gateway verwendet.
Beachten Sie, dass die Nutzdaten ** nicht die Nachricht selbst enthalten, sondern nur die Nachrichten-ID **, wenn der Bot HTTP-POSTs an die Ziel-URL in 2. sendet. Um die Nachricht selbst zu erhalten, müssen Sie ein HTTP-GET von Lambda zu Cisco Spark durchführen, um die der ID entsprechende Nachricht zu erhalten. Bereiten Sie dieses Programm selbst vor (6 in der Abbildung). Sie müssen auch ein Programm (HTTP POST) vorbereiten, das die Ergebnisse in Cisco Spark anzeigt (7 in der Abbildung).
Sie müssen sich als echter Benutzer anmelden, um einen Bot zu erstellen. Weil Bot in Verbindung mit dem tatsächlichen Benutzer registriert ist.
Gehen Sie zur folgenden Site und klicken Sie auf "Bot erstellen": https://developer.ciscospark.com/add-app.html
Füllen Sie alle folgenden drei Punkte auf dem folgenden Bildschirm aus:
Wenn Sie es richtig eingeben, wird das Zugriffstoken für Bot angezeigt. Notieren Sie es sich. Es wird nicht ablaufen. Mit Vorsicht behandeln.
Öffnen Sie Cisco Spark, gehen Sie zu einem beliebigen Raum und fügen Sie den Bot dem Raum auf die gleiche Weise hinzu, wie Sie eine Person zu einem Raum hinzufügen würden (suchen Sie nach dem Namen des Bots und fügen Sie ihn dann hinzu).
Wenn Sie eine Nachricht an Cisco Spark senden, leitet der Bot sie weiter und leitet sie über HTTP POST an ein anderes Programm weiter. Es gibt verschiedene Möglichkeiten, das Programm zu verarbeiten. In der Regel wird das Ergebnis jedoch an den Bot zurückgegeben (sogenannter Rückruf) und auf Cisco Spark angezeigt. Der Mechanismus des Rückrufs über HTTP heißt Webhook.
Die Ziel-URL ist besonders wichtig für die Konfiguration von Webhooks. Der Bot ist das Ziel, um HTTP-POST an die angegebene URL zu senden, die im Internet vorhanden ist.
Die Ziel-URL und das Programm müssen vom Ersteller des Bots vorbereitet werden. Zu diesem Zweck können Sie beispielsweise die herkömmliche Methode verwenden, z. B. einen Server vorbereiten, das Betriebssystem installieren, den Webserver ausführen, eine IP-Adresse zuweisen und anschließend eine URL zuweisen. Da dies viel Zeit und Mühe kostet, bereiten wir hier die Ziel-URL mithilfe des API-Gateways vor und führen das eigentliche Programm auf Lambda aus.
Um die Ziel-URL zu ermitteln, müssen Sie zuerst das Lambda + API-Gateway konfigurieren. Richten Sie den Webhook für Cisco Spark in 4-1.1 ein.
In diesem Abschnitt wird [Verwenden von AWS Lambda mit Amazon API Gateway (über On-Demand-HTTPS)] beschrieben (http://docs.aws.amazon.com/ja_jp/lambda/latest/dg/with-on-demand-https- Mit dem Tutorial in example.html) als Basisinformationen haben wir die Schritte nach Bedarf angepasst, um den Cisco Spark Bot zu unterstützen.
Es wird davon ausgegangen, dass die Einstellungen für AWS Management Console und AWS CLI abgeschlossen wurden und zugänglich sind. Wenn nicht abgeschlossen, lesen Sie "Schritt 1" in diesem Artikel. Bitte vervollständigen Sie die Einstellung unter ": Vorbereitung".
Ein Bereitstellungspaket ist eine komprimierte Version der folgenden beiden als Zip-Datei:
Führen Sie die folgenden Schritte aus, um Folgendes zu erstellen:
$ vi LF4CiscoSpark.py
---
from __future__ import print_function
import boto3
import json
import requests
import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)
access_code = '' #Geben Sie den Bot-Zugangscode ein
botDisplayName = '' #Geben Sie den Bot-Namen ein
def sendSparkGET(event):
url = 'https://api.ciscospark.com/v1/messages/{0}'.format(event.get('data')['id'])
headers = {
'Authorization' : 'Bearer ' + access_code,
'Content-Type' : 'application/json'
}
r1 = requests.get(url, headers = headers)
return json.loads(r1.text)
def sendSparkPOST(event,message_detail):
url = 'https://api.ciscospark.com/v1/messages/'
headers = {
'Authorization' : 'Bearer ' + access_code,
'Content-Type' : 'application/json'
}
payload = {
"roomId" : event.get('data')['roomId'],
"text" : 'pong'
}
r1 = requests.post(url, headers = headers, data = json.dumps(payload))
return True
def handler(event, context):
print("Received event: " + json.dumps(event, indent=2))
message_detail = sendSparkGET(event)
bot_command = message_detail['text']
bot_commands = {
botDisplayName + 'ping' : lambda x, y : sendSparkPOST(x, y)
}
if bot_command in bot_commands:
return bot_commands[bot_command](event,message_detail)
else:
raise ValueError('Unrecognized operation')
---
$ zip LF4CiscoSpark.zip -r /(path-to-site-packages)/site-packages/requests
$ zip -g LF4CiscoSpark.zip LF4CiscoSpark.py
Erwähnen Sie den Bot und senden Sie eine "Ping" -Nachricht, und der Bot antwortet mit "Pong". Wenn Sie einen anderen Befehl als "ping" verwenden möchten, beschreiben Sie den Prozess in bot_commands.
IAM ist ein Mechanismus, der steuert, auf welche AWS-Ressourcen Benutzer zugreifen können und wie sie verwendet werden können. Als allgemeine Einstellungsprozedur: 1) Erstellen einer Rolle, 2) Erstellen einer Richtlinie und 3) Anhängen einer Richtlinie an eine Rolle. Da die Richtlinie diesmal die Standardrichtlinie verwendet, ist es nicht erforderlich, 2) auszuführen. Wenn der Vorgang abgeschlossen ist, wird eine Zeichenfolge mit dem Namen Role ARN angezeigt. Dies ist erforderlich, um die Lambda-Funktion im nächsten Schritt zu erstellen.
$ aws lambda create-function --region us-west-2 \
--function-name LF4CiscoSpark \
--zip-file fileb://LF4CiscoSpark.zip \
--role arn:xxxxxxxxxxxxxxxxxx \
--handler LF4CiscoSpark.handler \
--runtime python3.6 \
--profile adminuser
$ aws lambda update-function-code \
--function-name LF4CiscoSpark \
--zip-file fileb://LF4CiscoSpark.zip
Dieses Mal verwenden wir AWS CLI, um ein API-Gateway zu erstellen. Es gibt einige Schritte, aber es ist einfacher zu verstehen, ob Sie arbeiten, während Sie die Arbeitsergebnisse in der CLI einzeln auf der AWS-Konsole überprüfen.
$ aws apigateway create-rest-api \
--name API4CiscoSpark \
--region us-west-2 \
--profile adminuser
(Ausführungsergebnis unten)
{
"name": "API4CiscoSpark",
"createdDate": 1501839827,
"id": "" # API ID
}
Ergebnis der AWS-Konsolenanzeige (API-Gateway):
$ aws apigateway get-resources \
--rest-api-id (API ID)
(Ausführungsergebnis unten)
{
"items": [
{
"path": "/",
"id": "" # ROOT RESOURCE ID
}
]
}
$ aws apigateway create-resource \
--rest-api-id (API ID) \
--parent-id (ROOT RESOURCE ID) \
--path-part Resource4CiscoSpark
(Ausführungsergebnis unten)
{
"pathPart": "Resource4CiscoSpark",
"parentId": "",
"path": "/Resource4CiscoSpark",
"id": "" # RESOURCE ID
}
Ergebnis der AWS-Konsolenanzeige (API-Gateway):
$ aws apigateway put-method \
--rest-api-id (API ID) \
--resource-id (RESOURCE ID) \
--http-method POST \
--authorization-type NONE
Ergebnis der AWS-Konsolenanzeige:
$ aws apigateway put-integration \
--rest-api-id (API ID) \
--resource-id (RESOURCE ID) \
--http-method POST \
--type AWS \
--integration-http-method POST \
--uri arn:aws:apigateway:(region):lambda:path/2015-03-31/functions/arn:aws:lambda:(region):(Kontonummer):function:LF4CiscoSpark/invocations
Ergebnis der AWS-Konsolenanzeige (API-Gateway):
$ aws apigateway put-method-response \
--rest-api-id (API ID) \
--resource-id (RESOURCE ID) \
--http-method POST \
--status-code 200 \
--response-models "{\"application/json\": \"Empty\"}"
$ aws apigateway put-integration-response \
--rest-api-id (API ID) \
--resource-id (RESOURCE ID) \
--http-method POST \
--status-code 200 \
--response-templates "{\"application/json\": \"\"}"
Ergebnis der AWS-Konsolenanzeige (API-Gateway):
$ aws apigateway create-deployment \
--rest-api-id (API ID) \
--stage-name prod
Ergebnis der AWS-Konsolenanzeige (API-Gateway):
Die rechts neben dem Aufrufen einer URL aufgeführte URL ist die Ziel-URL für die Webhooks von Cisco Spark.
$ aws lambda add-permission \
--function-name LF4CiscoSpark \
--statement-id apigateway \
--action lambda:InvokeFunction \
--principal apigateway.amazonaws.com \
--source-arn "arn:aws:execute-api:us-west-2:(Kontonummer):(API ID)/prod/POST/Resource4CiscoSpark"
Ergebnis der Anzeige der AWS-Konsole (* AWS Lambda *):
Führen Sie HTTP PUT unter den folgenden Bedingungen aus, um einen Webhook einzurichten:
roomId kann von [hier] aus untersucht werden (https://developer.ciscospark.com/endpoint-rooms-roomId-get.html).
import requests
access_code = '' #Geben Sie hier den Zugangscode ein
url = 'https://api.ciscospark.com/v1/webhooks'
headers = {
'Authorization' : 'Bearer ' + access_code,
'Content-Type' : 'application/json'
}
r = requests.put(url, headers = headers)
{
'name' : 'My Awesome Webhook',
'targetUrl' : 'https://example.com/mywebhook',
'resource' : 'messages',
'event' : 'created',
'filter' : 'roomId=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
}
Erwähnen Sie den Bot in Cisco Spark und geben Sie "ping" ein. Der Bot gibt dann "pong" zurück.