LambdaでTeamsのチャットボットを実装する方法 (所要時間5分)

# できたこと

[Microsoft Teams](https://www.microsoft.com/ja-jp/microsoft-teams/group-chat-software) にオウムがえしチャットボットを実装しました
[AWS Lambda](https://aws.amazon.com/jp/lambda/) を利用しました

:::note info
手順さえわかっていれば、所要時間 5分 です
:::

# 手順

## 1. Lambda関数を用意する

1-1. [AWSマネジメントコンソール](https://aws.amazon.com/jp/console/)を開き、Lambda関数を新規作成する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102797/b1eb7a5a-2616-a673-3b46-3a42a72e0677.png)

1-2. 関数名は適当に決める。ランタイムは `Node.js 18.x` にする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102797/05ebb0d7-78b9-4982-206c-477adccfc239.png)

1-3. 関数URLを有効化にチェックを入れ、認証タイプを NONE にする
1-4. オリジン間リソース共有(CORS)にチェックを入れる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102797/1b5ae9ff-ed02-0eaa-6956-a2d7f884754d.png)

1-5. 関数を作成する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102797/e707edfe-310f-fec0-5ffb-449fa484e5e3.png)

1-6. コードを書く
```JavaScript
export const handler = async(event) => {
    const body = JSON.parse(event.body);
    const response = {
        'type': 'message',
        'text': 'hello! Mr. ' + body.from.name + '. You said : ' + body.text
    };
    return response;
};
```

1-7. Lambdaの関数URLをコピーする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102797/bcef36ca-dc38-8425-3422-480d513519dd.png)

## 2. Teamsでボットをセットアップする

2-1. チーム名の横の３点リーダをクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102797/9907f18f-288b-d3bc-08b1-08e116d22aa3.png)

2-2. チームを管理 をクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102797/d7f556ac-0c31-5ea7-ca21-da620e25fa19.png)

2-3. アプリを選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102797/bf9b26c9-091e-6edc-3f20-d4a6ec2f086d.png)

2-4. 画面右下の「送信 Webhook を作成」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102797/d7037aba-d1c3-ed1d-b403-d5a76f124cdf.png)

2-5. 名前、コールバックURL、画像(任意)を設定して「作成」をする

:::note info
コールバックURLには、手順1-7でコピーしたURLを設定します
:::
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102797/70879f83-f2a8-87d5-cdcb-bd4ea8c63a86.png)

:::note warn
作成した際に発行されるセキュリティトークンはメモして保存しておいてください
今回は使いませんが、再発行できないので、ご注意ください
:::

## 3. ボットと会話する

3-1. 2-4で設定した名前をメンションしてメッセージを送ります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102797/9671a0fa-158e-0ef5-1753-ad8d71ea4ebb.png)

:::note info
この例では `TestBot` にメンションしていますが、これを 2-5 で設定した名前にします
:::

# 役にたった情報のリンク集

■ Microsoft Learn
[送信 Webhook を作成する](https://learn.microsoft.com/ja-jp/microsoftteams/platform/webhooks-and-connectors/how-to/add-outgoing-webhook?tabs=urljsonpayload%2Cjson)
  
■ GitHub (サンプルコード)
[Microsoft-Teams-Samples > outgoing-webhook > nodejs](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/outgoing-webhook/nodejs)

■ Microsoft Learn
[Bot Framework Connector サービスの API リファレンス](https://learn.microsoft.com/ja-jp/azure/bot-service/rest-api/bot-framework-rest-connector-api-reference?view=azure-bot-service-4.0)

:::note info
ChatBotのJSONのやり取りもこのAPIに従っている
:::

■ Microsoft Learn
[Bot Connector API を使用してメッセージにメディア添付ファイルを追加する](https://learn.microsoft.com/ja-jp/azure/bot-service/rest-api/bot-framework-rest-connector-add-media-attachments?view=azure-bot-service-4.0)

■ マコーの日記
[Office 365 Teamsにoutgoing webhookが来たのでbotっぽいものを作ってみた](https://hkou.hatenablog.com/entry/2018/06/09/130824)


以上