らくがきちょう

なんとなく

pyteams で送信したメッセージを Teams 上で確認してみる

先日、Python から Microsoft Teams へ投稿するというメモを書きましたが、pymsteams を使うと Python から Microsoft Teams の Incoming Webhook へ簡単にメッセージを送信出来ます。 今回は「pymsteams を使ってメッセージ送信すると、実際の Microsoft Teams 上ではどう見えるか?」を試してみました。

目次

テキストのみ

import pymsteams

message = pymsteams.connectorcard(<URL>)
message.text("Message Body")
message.send()

f:id:sig9:20190629231833p:plain

テキスト無し (エラーになる)

この場合はエラーになり、メッセージを投稿出来ません。 メッセージには text または summary が必須だそうです。

import pymsteams

message = pymsteams.connectorcard(<URL>)
message.title("Message Title")
message.send()

実際のエラーメッセージは以下の通りです。

# python no-text.py
Summary or Text is required.

タイトルとテキスト

import pymsteams

message = pymsteams.connectorcard(<URL>)
message.title("Message Title")
message.text("Message Body")
message.send()

f:id:sig9:20190629232805p:plain

サマリーのみ

このままでは文字が見えません… 「リンクボタンだけを設置したいが、text も summary も無いとエラーになってしまう」という場合には summary を設定することでリンクボタンだけ、置かれているように見せることが可能です。

import pymsteams

message = pymsteams.connectorcard(<URL>)
message.summary("Message Summary")
message.send()

f:id:sig9:20190629232018p:plain

テキストを改行する

改行は少なくても二通りの方法で実現出来ました。 ただ、失敗例もあるので、やや注意が必要です。

失敗例

「\r\n」のように「\r」と「\n」の間を繋げてしまうと改行しません。

import pymsteams

message = pymsteams.connectorcard(<URL>)
message.text("1st line.\r\n2nd line.\r\n3rd line.")
message.send()

f:id:sig9:20190629232248p:plain

成功例 1 (「\r \n」を使う)

改行させたい場合は「\n \n」のように「\r」と「\n」の間にスペースを入れます。

import pymsteams

message = pymsteams.connectorcard(<URL>)
message.text("1st line.\r \n2nd line.\r \n3rd line.")
message.send()

成功例 2 (br タグを使う)

別の手段として br タグで改行させることも出来ます。

import pymsteams

message = pymsteams.connectorcard(<URL>)
message.text("1st line.</br>2nd line.</br>3rd line.")
message.send()

リンクを追加する

import pymsteams

message = pymsteams.connectorcard(<URL>)
message.text("[Google](https://www.google.com)")
message.send()

f:id:sig9:20190629232914p:plain

リンクボタンを追加する

ここでは「text の次に addLinkButton」の順で追加していますが、text より先に addLinkButton しても、リンクボタンは必ずメッセージの最下部に設置されるようです。

import pymsteams

message = pymsteams.connectorcard(<URL>)
message.text("Add a link button.")
message.addLinkButton("Jump to Google.", "https://www.google.com")
message.send()

f:id:sig9:20190629233014p:plain

セクションを追加する

ここでは 2 つ、セクションを追加していますが、もっと多くのセクションを追加することも可能です。

import pymsteams

message = pymsteams.connectorcard(<URL>)
message.text("Multiple sections.")

section1 = pymsteams.cardsection()
section1.text("1st section.")
message.addSection(section1)

section2 = pymsteams.cardsection()
section2.text("2nd section.")
message.addSection(section2)

message.send()

f:id:sig9:20190629233123p:plain

アクションを追加する

アクションを 1 つ、追加する

アクションを 1 つだけ、追加した場合は以下の見え方になります。 後述する「複数アクションを追加した場合」と異なり、最初から内容が展開されて表示されます。

import pymsteams

message = pymsteams.connectorcard(<URL>)

action1 = pymsteams.potentialaction(_name = "Add a comment")
action1.addInput("TextInput", "comment", "Add a comment here", False)
message.addPotentialAction(action1)

message.summary("Potential Action Example")
message.send()

f:id:sig9:20190629233816p:plain

アクションを複数、追加する

アクションを複数追加した場合は選択式になります。

import pymsteams

message = pymsteams.connectorcard(<URL>)

action1 = pymsteams.potentialaction(_name = "Add a comment")
action1.addInput("TextInput", "comment", "Add a comment here", False)
action1.addAction("HttpPost","Add Comment","https://example.com")
message.addPotentialAction(action1)

action2 = pymsteams.potentialaction(_name = "Set due date")
action2.addInput("DateInput","dueDate","Enter due date")
action2.addAction("HttpPost","save","https://example.com")
message.addPotentialAction(action2)

action3 = pymsteams.potentialaction(_name = "Change Status")
action3.choices.addChoices("In progress","0")
action3.choices.addChoices("Active","1")
action3.addInput("MultichoiceInput","list","Select a status",False)
action3.addAction("HttpPost","Save","https://example.com")
message.addPotentialAction(action3)

message.summary("Potential Action Example")
message.send()

f:id:sig9:20190629234234p:plain

f:id:sig9:20190629234244p:plain

f:id:sig9:20190629234255p:plain

Markdown

ヘッダーやリスト記法等を試してみたのですが、Incoming Webhook から Markdown を綺麗に表現するのは、かなり難しいように感じました。 太字、斜体、リンク程度であれば簡単に利用可能でした。

import pymsteams

message = pymsteams.connectorcard(<URL>)
message.text(\
    "This is *Bold*. </br>" +\
    "This is _Italic_. </br>" +\
    "Thin is [Link](https://www.google.com)</br>")
message.send()

f:id:sig9:20190629234604p:plain