slackで投稿内容を自動翻訳する(3/5)slackにおけるメッセージの構造

前回に引き続きslackで投稿内容を自動翻訳の2回目。
今回はslackのメッセージの構造を見ていきます。

1.Pythonからgoogle翻訳(googletransの使い方)
2.Pythonプログラムからメッセージを投稿
3.slackにおけるメッセージの構造(今回)
4.投稿イベントを検知して投稿(準備中)
5.投稿されたメッセージを翻訳して投稿(準備中)


3-1.メッセージはテキストだけではない

普段slackでメッセージやり取りしていると、大抵はテキストメッセージだけですが、例えば、zendeskからメッセージをticket情報を飛ばすと以下のような表示になり、単にテキストだけでなく構造を持っているということが分かります。


このようなデータがslack上でどのように構造化されているのか見てみます。
以下のページ中段の「Response」セッションにサンプルが記載されています。
slack API chat.postMessage

"message": {
        "text": "Here's a message for you",
        "username": "ecto1",
        "bot_id": "B19LU7CSY",
        "attachments": [
            {
                "text": "This is an attachment",
                "id": 1,
                
"fallback": "This is an attachment's fallback"
            }
        ],
        "type": "message",
        "subtype": "bot_message",
        "ts": "1503435956.000247"
    }


尚、JSON形式で書かれていますが、Python上ではslackclientを利用するため、その形式を意識する必要はありません(辞書や配列で扱います)。

3-2.各要素の説明
メッセージの主要な要素は以下の通りです。
・text: ベーシックなメッセージ内容
・username: メッセージ投稿者名
・attachments: インデントされたメッセージ部(下部で説明)
・ts: timestampのこと
詳細な説明は以下ページにあります。
slack API Basic message formatting

attachmentsはさらに多くの要素を持ちことができ、その主要な要素は以下の通りです。
・pretext: atachment上部に小さく表示されるテキスト
・fallback: attachmentのサマリ(表示されず、、、動作不明)
・title: メッセージのタイトル
・text: ベーシックなメッセージ内容

詳細は以下ページにあります。
slack API Attaching content and links to messages

尚、attachmentsは配列形式になっており、1メッセージに対して複数持つことが可能です。

また、以下でメッセージの表示を確認することができます。
slack API Message Formatting
※ JSON形式で記述する必要があります。


3-3.Pythonからメッセージを投稿
前回は単にhallo worldとしか表示してませんでしたが、今回の構造を理解したうえで、もっとリッチなメッセージを投稿してみます。
プログラム内容は前回とほぼ変わらず、attachmentsを定義し、slack APIに渡している点だけが異なります。
from slackclient import SlackClient
slack_client = SlackClient('<前回取得した取得したslack API token>')
channel_id = "<前回取得したchannel id>"
if __name__ == '__main__':
    attachments = [
        {
            'pretext': "pretextはココに表示されます①",
            'fallback': "fallback①",
            'title': "メッセージタイトル①",
            'text': "テキスト①"
        }, {
            'pretext': "pretextはココに表示されます②",
            'fallback': "fallback②",
            'title': "メッセージタイトル②",
            'text': "テキスト③"
        }
    ]
    slack_client.api_call(
        "chat.postMessage",
        channel   = channel_id,
        text      = "textはここに表示されます",
        username  = "Pythonプログラムからの投稿",
        attachments = attachments
    )


実行結果は以下の通りです。




今回はここまで。

コメント

このブログの人気の投稿

Python SQLite スレッド間でコネクションの使いまわしは出来ない

slackでgeneralの投稿を全削除する

Google location history(JSON形式)をCSVファイルにする