forked from atc0005/go-teams-notify
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
196 lines (165 loc) · 4.32 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
// Copyright 2022 Adam Chalkley
//
// https://github.com/atc0005/go-teams-notify
//
// Licensed under the MIT License. See LICENSE file in the project root for
// full license information.
/*
This is an example of a client application which uses this library to process
(pretend) user display names and IDs and generate multiple user mentions
within a specific Microsoft Teams channel.
This example is a somewhat rambling exploration of available options for
generating user mentions. While functional, this example file does not
necessarily reflect optimal approaches for generating user mentions.
See the other Adaptive Card user mention examples for more targeted use cases
or the https://github.com/atc0005/send2teams project for a real-world CLI app
that uses this library to generate (optional) user mentions.
Of note:
- default timeout
- package-level logging is disabled by default
- validation of known webhook URL prefixes is *enabled*
- message is in Adaptive Card format
- text is formatted
- multiple user mentions are added to the message
See https://docs.microsoft.com/en-us/adaptive-cards/authoring-cards/text-features
for the list of supported Adaptive Card text formatting options.
*/
package main
import (
"log"
"os"
goteamsnotify "github.com/atc0005/go-teams-notify/v2"
"github.com/atc0005/go-teams-notify/v2/adaptivecard"
)
func main() {
// Initialize a new Microsoft Teams client.
mstClient := goteamsnotify.NewTeamsClient()
// Set webhook url.
webhookUrl := "https://outlook.office.com/webhook/YOUR_WEBHOOK_URL_OF_TEAMS_CHANNEL"
// Allow specifying webhook URL via environment variable, fall-back to
// hard-coded value in this example file.
expectedEnvVar := "WEBHOOK_URL"
envWebhookURL := os.Getenv(expectedEnvVar)
switch {
case envWebhookURL != "":
log.Printf(
"Using webhook URL %q from environment variable %q\n\n",
envWebhookURL,
expectedEnvVar,
)
webhookUrl = envWebhookURL
default:
log.Println(expectedEnvVar, "environment variable not set.")
log.Printf("Using hardcoded value %q as fallback\n\n", webhookUrl)
}
// Create, print & send simple message.
simpleMsg, err := adaptivecard.NewSimpleMessage("Hello from NewSimpleMessage!", "", true)
if err != nil {
log.Printf(
"failed to create message: %v",
err,
)
os.Exit(1)
}
if err := simpleMsg.Prepare(); err != nil {
log.Printf(
"failed to prepare message: %v",
err,
)
os.Exit(1)
}
log.Println(simpleMsg.PrettyPrint())
if err := mstClient.Send(webhookUrl, simpleMsg); err != nil {
log.Printf(
"failed to send message: %v",
err,
)
os.Exit(1)
}
// Create, print & send user mention message.
mentionMsg, err := adaptivecard.NewMentionMessage(
"John Doe",
"New user mention message.",
)
if err != nil {
log.Printf(
"failed to create mention message: %v",
err,
)
os.Exit(1)
}
if err := mentionMsg.Prepare(); err != nil {
log.Printf(
"failed to prepare message: %v",
err,
)
os.Exit(1)
}
log.Println(mentionMsg.PrettyPrint())
if err := mstClient.Send(webhookUrl, mentionMsg); err != nil {
log.Printf(
"failed to send message: %v",
err,
)
os.Exit(1)
}
// Create simple message, then add a user mention to it.
customMsg, err := adaptivecard.NewSimpleMessage("NewSimpleMessage.", "", true)
if err != nil {
log.Printf(
"failed to create message: %v",
err,
)
os.Exit(1)
}
if err := customMsg.Mention(
false,
"John Doe",
"with a user mention added as a second step.",
); err != nil {
log.Printf(
"failed to add user mention: %v",
err,
)
os.Exit(1)
}
if err := customMsg.Prepare(); err != nil {
log.Printf(
"failed to prepare message: %v",
err,
)
os.Exit(1)
}
log.Println(customMsg.PrettyPrint())
if err := mstClient.Send(webhookUrl, customMsg); err != nil {
log.Printf(
"failed to send message: %v",
err,
)
os.Exit(1)
}
// Create empty message, add a user mention to it.
bareMsg := adaptivecard.NewMessage()
err = bareMsg.Mention(
false,
"John Doe",
"Testing Message.Mention() method on card with no prior Elements.",
)
if err != nil {
log.Printf(
"failed to add user mention: %v",
err,
)
os.Exit(1)
}
if err := mstClient.Send(webhookUrl, bareMsg); err != nil {
log.Printf(
"failed to send message: %v",
err,
)
os.Exit(1)
}
}