🍣

Cloud FunctionsのHTTPトリガーを使って,Slackのチャンネルへ通知する

2023/10/08に公開

Python Slack SDKからSlackのチャンネルへ通知する仕組みをGoogle Cloud Functionsで実現します。
Slack Appは,前回の記事で作成したものを用います。

https://zenn.dev/tossy21/articles/c9ff5d1e24b407

Cloud FunctionsでSlackへ通知する関数を作成

Cloud Functionsで関数を作成します。
コードは前回同様のものをベースとして利用します。

以下のコードをmain.pyとして保存します。
Cloud Functionsでは,関数ディレクトリのルートにあるmain.pyという名前のファイルからソースコードを読み込みます。

https://cloud.google.com/functions/docs/writing?hl=ja#directory-structure

import functions_framework
import logging
import os

# Import WebClient from Python SDK (github.com/slackapi/python-slack-sdk)
from slack_sdk import WebClient
from slack_sdk.errors import SlackApiError

@functions_framework.http
def my_function(request):
    # WebClient instantiates a client that can call API methods
    # When using Bolt, you can use either `app.client` or the `client` passed to listeners.
    client = WebClient(token=os.environ.get("SLACK_BOT_TOKEN"))
    logger = logging.getLogger(__name__)

    # ID of the channel you want to send the message to
    channel_id = "YOUR_ID"

    try:
        # Call the chat.postMessage method using the WebClient
        result = client.chat_postMessage(channel=channel_id, text="Hello world")
        logger.info(result)
        return "success"

    except SlackApiError as e:
        logger.error(f"Error posting message: {e}")
        return "error"

同様に,必要なパッケージは,requirements.txtに記載します。

slack_sdk==3.23.0

デプロイ

環境変数SLACK_BOT_TOKEN--set-env-varsオプションを付与して指定します。

gcloud functions deploy my_function --set-env-vars SLACK_BOT_TOKEN=YOUR_TOKEN --trigger-http --runtime=python311 --no-allow-unauthenticated --source=. --gen2

Slackへの通知を確認

デプロイ後は,該当のURLに対して,curlコマンドを叩き,関数を実行します。
まず,URLを確認します。

gcloud functions describe my_function --gen2 --region REGION --format="value(serviceConfig.uri)"

https://my-function-xxxxxxxx-xx.a.run.app

その後,該当のURLへcurlを叩きます。

curl -m 70 -X POST URL -H "Authorization: Bearer $(gcloud auth print-identity-token)" -H "Content-Type: application/json" -d '{}'

https://cloud.google.com/functions/docs/create-deploy-gcloud?hl=ja#triggering_the_function

設定したSlackのチャンネルへ通知されることを確認します。

GitHubで編集を提案

Discussion