LoginSignup
3
4

More than 1 year has passed since last update.

LambdaからTeamsへ通知するAPIを作る方法

Last updated at Posted at 2022-11-16

はじめに

今回はAWSのサービスの1つである、LambdaでAPIを作って実行したときにTeamsへ通知がくるようにします。

開発環境

  • OS Windows 10(NVIDIA GTX 1650Ti,16GB RAM, i5-10300H CPU)
  • Visual Studio Code 1.73.1
  • Python 3.9

実際にAPIを作ります!

TeamsでWebhookを使ってURLを作成

作成したURL用いることでTeamsに情報を送信できるようになります。
公式に載っているやり方でURLを作成します。

  1. 通知を出すチャネルから「・・・(その他のオプション)」をクリック
  2. 「コネクタ」を選択したらWebhookを検索し、追加をする
  3. 「構成」を選択
    MicrosoftTeams-image.png
  4. 名前を入力後、「作成」を行う
    MicrosoftTeams-image (1).png
  5. 作成したURLはコピーして保存をする
    MicrosoftTeams-image (2).png

先ほどWebhookで作成したURLをPythonから叩いてみましょう!
Teamsにメッセージを送る際のタイトルと入力されたメッセージをdataに格納します。そしてdataをJSON形式でPOSTします。

import requests
import json

url = "https://XXX/XXX"

data = {
    "text": "aaa",
    "title":"test"
    }
li = json.dumps(data)
responce = requests.post(url, li)
print(responce.json())

これを実行するとTeamsに通知が来ます。

image.png

Lambda関数の作成

この通知する機能を外部から叩くためにLambda関数を作成します。

image.png

GETメソッドでクエリパラメータのkey1の中身をTeamsに送るようにコードを編集します。

import json
import requests

def lambda_handler(event, context):

    url = "https://XXX/XXX" #コピーしたURLをここに貼り付ける
    data = {
        "title": "test",
        "text": event["queryStringParameters"]["key1"] #value1がテキストでくるようにする
    }
    data_json = json.dumps(data)
    response = requests.post(url, data_json)
    
    return {
        "statusCode": 200,
        "body": json.dumps({
            "result": "Success"
        })
    }

リクエストが成功したらstatusCodeを200で返し、JSONデータで

{
    "result": "Success"
}

を返します。

実行

コードをDeployして、テストイベントのJSONデータを次のようにしてTestを押して実行します。

{
  "queryStringParameters": {
    "key1": "value1"
  }
}

実行後、Teamsを開いたら・・・
teams-lambda.png

タイトル「test」で、メッセージには先ほど入力したvalue1が送られてきました!

Lambdaの関数URLを発行する方法

image.png

Lambda関数の設定から関数URLを発行することでPythonからたたけるようになります。

lambda-test.py
import requests

url ="https://XXX.lambda-url.ap-northeast-1.on.aws/?key1=aaa" 
response = requests.get(url)
print(response.json())

API Gatewayを用いる方法

今度はAPI GatwayでLambdaで作成したAPIと結びつけます。

image.png

API Gatewayを起動したら、「APIを作成」をクリックします。

image.png

APIタイプを選択できますが、今回はREST APIを選択し、「構築」をします。

image.png

プロトコル選択では「REST」を選択し「新しいAPI」を作成します。
そしてAPI名を入力後、「APIの作成」をクリックします。

image.png
次に「アクション」から「リソッドの作成」を選択し、
image.png
このような画面になるので、リソース名(今回の場合は『notification』)を入力して「リソースの作成」をクリックします。

image.png
リソースを作成後、再び「アクション」から今度は「メソッドの作成」を選択し、「GET」を選びます。

image.png
統合タイプには「Lambda関数」を選択し、「Lambdaプロキシ統合の使用」にチェックを入れます。
最後に「Lambda関数」の欄には先ほどLambdaで作成したAPIの名前を入力し、「保存」をします。

image.png
APIのデプロイされるステージは「新しいステージ」とし、ステージ名を今回は「api」と入力しこのままデプロイします。

lambda-api.png

PythonからAPIを叩いてみる

lambda-test2.py
import requests

url ="https://XXX/XXX/XXX/api/notification?key1=aaa" #API Gatewayで作ったURLを張り付ける
response = requests.get(url)
print(response.json())

GETメソッドを用いてコードを書きます。貼り付けたURLにはクエリを入力。
最後にコマンドプロンプトで実行します。
image.png

今度はテキストにaaaと書かれた通知が届きました!

まとめ

  • LambdaでTeamsにメッセージを送るAPIを作成した
  • Webhookで通知を受け取れるようURLを作成した
3
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4