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()
|
テキスト無し (エラーになる)
この場合はエラーになり、メッセージを投稿出来ません。 メッセージには 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()
|
サマリーのみ
このままでは文字が見えません… 「リンクボタンだけを設置したいが、text も summary も無いとエラーになってしまう」という場合には summary を設定することでリンクボタンだけ、置かれているように見せることが可能です。
| import pymsteams
message = pymsteams.connectorcard(<URL>)
message.summary("Message Summary")
message.send()
|
テキストを改行する
改行は少なくても二通りの方法で実現出来ました。 ただ、失敗例もあるので、やや注意が必要です。
失敗例
「\r\n」のように「\r」と「\n」の間を繋げてしまうと改行しません。
| import pymsteams
message = pymsteams.connectorcard(<URL>)
message.text("1st line.\r\n2nd line.\r\n3rd line.")
message.send()
|
成功例 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()
|
リンクボタンを追加する
ここでは「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()
|
セクションを追加する
ここでは 2 つ、セクションを追加していますが、もっと多くのセクションを追加することも可能です。
1
2
3
4
5
6
7
8
9
10
11
12
13
14 | 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()
|
アクションを追加する
アクションを 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()
|
アクションを複数、追加する
アクションを複数追加した場合は選択式になります。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 | 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()
|
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()
|