Cisco Spark a une fonction Bot. Au lieu de mentionner et de parler à une personne, lorsque vous mentionnez et parlez à un Bot, le Bot le comprend comme une commande, le traite et renvoie le message résultant (en fait, le Bot ne fait que relayer et le traitement réel est effectué. Un autre programme fait).
Cela dépend de l'idée du type de traitement effectué et du type de résultat renvoyé. Le processus le plus simple ici consiste à créer un bot qui répond au message ping avec pong. Pour la partie de traitement proprement dite, la passerelle d'API AWS Lambda + Amazon sera utilisée.
Notez que lorsque le Bot HTTP POST à l'URL cible en 2., la charge utile ** ne contient pas le message lui-même, seulement l'ID de message **. Pour obtenir le message lui-même, vous devez effectuer un HTTP GET de Lambda à Cisco Spark pour obtenir le message correspondant à l'ID. Préparez vous-même ce programme (6 sur la figure). Vous devez également préparer un programme (HTTP POST) qui affiche les résultats dans Cisco Spark (7 sur la figure).
Vous devez vous connecter en tant qu'utilisateur réel pour créer un bot. Parce que Bot est enregistré en association avec l'utilisateur réel.
Accédez au site suivant et cliquez sur "Créer un robot": https://developer.ciscospark.com/add-app.html
Remplissez les trois éléments suivants sur l'écran suivant:
Si vous le saisissez correctement, le jeton d'accès pour Bot sera affiché, alors notez-le. Il n'expirera pas. Manipuler avec soin.
Ouvrez Cisco Spark, accédez à n'importe quelle salle et ajoutez le bot à la salle de la même manière que vous ajouteriez une personne à une salle (recherchez par le nom du bot, puis ajoutez).
Lorsque vous publiez un message sur Cisco Spark, le Bot le relaie et le transmet à un autre programme via HTTP POST. Il existe différentes manières de traiter le programme, mais le résultat est généralement renvoyé au Bot (appelé rappel) et affiché sur Cisco Spark. Le mécanisme de rappel par HTTP est appelé Webhook.
L'URL cible est particulièrement importante pour la configuration des webhooks. Le Bot est la destination pour lancer HTTP POST à l'URL spécifiée qui existe sur Internet.
L'URL cible et le programme doivent être préparés par le créateur du Bot. Pour cela, par exemple, vous pouvez utiliser la méthode conventionnelle telle que la préparation d'un serveur, l'installation du système d'exploitation, l'exécution du serveur Web, l'attribution d'une adresse IP, puis l'attribution d'une URL. Comme cela prend beaucoup de temps et d'efforts, nous préparons ici l'URL cible à l'aide d'API Gateway et exécutons le programme réel sur Lambda.
Pour déterminer l'URL cible, vous devez d'abord configurer Lambda + API Gateway. Configurez le webhook Cisco Spark dans 4-1.1.
Cette section décrit [Utilisation d'AWS Lambda avec Amazon API Gateway (via HTTPS à la demande)](http://docs.aws.amazon.com/ja_jp/lambda/latest/dg/with-on-demand-https- En utilisant le didacticiel dans example.html) comme informations de base, nous avons personnalisé les étapes nécessaires pour prendre en charge Cisco Spark Bot.
On suppose que les paramètres AWS Management Console et AWS CLI ont été définis et sont accessibles. S'il n'est pas terminé, reportez-vous à l '«Étape 1» de cet article. Veuillez compléter le réglage en vous référant à ": Préparation".
Un package de déploiement est une version compressée des deux suivants sous forme de fichier zip:
Suivez les étapes ci-dessous pour créer:
$ 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 = '' #Entrez le code d'accès au bot
botDisplayName = '' #Entrez le nom du bot
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
Mentionnez le Bot et envoyez un message "ping", et le Bot répondra "pong". Si vous souhaitez utiliser une commande autre que "ping", décrivez le processus dans bot_commands.
IAM est un mécanisme qui contrôle les ressources AWS auxquelles les utilisateurs peuvent accéder et comment elles peuvent être utilisées. En tant que procédure de configuration générale, 1) créez un rôle, 2) créez une stratégie et 3) associez une stratégie à un rôle. Puisque la politique utilise la politique standard cette fois, il n'est pas nécessaire d'effectuer 2). Lorsque la procédure est terminée, vous verrez une chaîne appelée Role ARN. Cela est nécessaire pour créer la fonction Lambda à l'étape suivante.
$ 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
Cette fois, nous utiliserons l'AWS CLI pour créer API Gateway. Il y a quelques étapes, mais il est plus facile de comprendre si vous travaillez en vérifiant les résultats du travail dans la CLI un par un sur la console AWS.
$ aws apigateway create-rest-api \
--name API4CiscoSpark \
--region us-west-2 \
--profile adminuser
(Résultat d'exécution ci-dessous)
{
"name": "API4CiscoSpark",
"createdDate": 1501839827,
"id": "" # API ID
}
Résultat d'affichage de la console AWS (API Gateway):
$ aws apigateway get-resources \
--rest-api-id (API ID)
(Résultat d'exécution ci-dessous)
{
"items": [
{
"path": "/",
"id": "" # ROOT RESOURCE ID
}
]
}
$ aws apigateway create-resource \
--rest-api-id (API ID) \
--parent-id (ROOT RESOURCE ID) \
--path-part Resource4CiscoSpark
(Résultat d'exécution ci-dessous)
{
"pathPart": "Resource4CiscoSpark",
"parentId": "",
"path": "/Resource4CiscoSpark",
"id": "" # RESOURCE ID
}
Résultat d'affichage de la console AWS (API Gateway):
$ aws apigateway put-method \
--rest-api-id (API ID) \
--resource-id (RESOURCE ID) \
--http-method POST \
--authorization-type NONE
Résultat d'affichage de la console AWS:
$ 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):(Numéro de compte):function:LF4CiscoSpark/invocations
Résultat d'affichage de la console AWS (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\": \"\"}"
Résultat d'affichage de la console AWS (API Gateway):
$ aws apigateway create-deployment \
--rest-api-id (API ID) \
--stage-name prod
Résultat d'affichage de la console AWS (API Gateway):
L'URL répertoriée à droite de Appel d'une URL est l'URL cible des webhooks 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:(Numéro de compte):(API ID)/prod/POST/Resource4CiscoSpark"
Résultat d'affichage de la console AWS (* AWS Lambda *):
Pour configurer un webhook, exécutez HTTP PUT dans les conditions suivantes:
roomId peut être étudié depuis ici.
import requests
access_code = '' #Entrez le code d'accès ici
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',
}
Mentionnez le Bot dans Cisco Spark et tapez "ping" et le Bot retournera "pong".
Recommended Posts