1. Introduction
- I have a friend in another project who said that he made a package to track when there was an error, he would send a message about chatwork for individuals or a general box => save the effort to access the server and see log => help more time consuming and more secure than the server. Oh, good friend. Of course I think I should only use it in the development and staging environment, but the product must be considered =))
- But what about the project using slack? So in the previous post I will guide the basic how to integrate and use gem slack-notifier to shoot slack notifications offline.
2. Setup
2.1 Create webhook
- Sign in slack
- https://slack.com/create#email
- Create a webhook (Incoming webhook) here .
2.2 Select channel
- Immediately after selecting the hook, the form select channel will be displayed.
- Here you want to notify send where to send, select that channel
- Select and then submit thoai (for example I choose #general)
2.3 Webhook URL
- After submitting the form successfully, the system will return you a URL. That is the webhook URL we use to connect to the slack.
- The URL looks like this
1 2 | https://hooks.slack.com/services/XXXXXXX/YYYYYYY/ZZZZZZZZZZZZZZZZ |
- Note: x, y, z are random characters.
2.4 Setup Rails
- If you don’t have a Rails app project yet, create it, then install the gem as follows
1 2 | gem <span class="token function">install</span> slack-notifier |
- You can try out the gem using the following code.
1 2 3 4 | <span class="token keyword">require</span> <span class="token string">"slack-notifier"</span> notifier <span class="token operator">=</span> <span class="token constant">Slack</span> <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token constant">Notifier</span> <span class="token punctuation">.</span> <span class="token keyword">new</span> <span class="token string">"https://hooks.slack.com/services/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"</span> notifier <span class="token punctuation">.</span> ping <span class="token string">"Hello World from <span class="token interpolation"><span class="token delimiter tag">#{</span> <span class="token constant">Rails</span> <span class="token punctuation">.</span> application <span class="token punctuation">.</span> <span class="token keyword">class</span> <span class="token punctuation">.</span> parent_name <span class="token delimiter tag">}</span></span> "</span> |
- You should see the words “Hello World from AppName” on your chat slack box right after
You can configure sending messages by another name as follows
1 2 3 4 5 | <span class="token keyword">require</span> <span class="token string">"slack-notifier"</span> notifier <span class="token operator">=</span> <span class="token constant">Slack</span> <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token constant">Notifier</span> <span class="token punctuation">.</span> <span class="token keyword">new</span> <span class="token string">"https://hooks.slack.com/services/XXXXX/YYYYY/ZZZZZ"</span> notifier <span class="token punctuation">.</span> username <span class="token operator">=</span> <span class="token string">"letung"</span> notifier <span class="token punctuation">.</span> ping <span class="token string">"Hello World from <span class="token interpolation"><span class="token delimiter tag">#{</span> <span class="token constant">Rails</span> <span class="token punctuation">.</span> application <span class="token punctuation">.</span> <span class="token keyword">class</span> <span class="token punctuation">.</span> parent_name <span class="token delimiter tag">}</span></span> "</span> |
Send to a certain channel:
1 2 3 4 5 | <span class="token keyword">require</span> <span class="token string">"slack-notifier"</span> notifier <span class="token operator">=</span> <span class="token constant">Slack</span> <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token constant">Notifier</span> <span class="token punctuation">.</span> <span class="token keyword">new</span> <span class="token string">"https://hooks.slack.com/services/XXXXX/YYYYY/ZZZZZ"</span> notifier <span class="token punctuation">.</span> channel <span class="token operator">=</span> <span class="token string">"#report"</span> notifier <span class="token punctuation">.</span> ping <span class="token string">"Hello World from <span class="token interpolation"><span class="token delimiter tag">#{</span> <span class="token constant">Rails</span> <span class="token punctuation">.</span> application <span class="token punctuation">.</span> <span class="token keyword">class</span> <span class="token punctuation">.</span> parent_name <span class="token delimiter tag">}</span></span> "</span> |
Add link to the message
1 2 3 4 5 6 | <span class="token keyword">require</span> <span class="token string">"slack-notifier"</span> notifier <span class="token operator">=</span> <span class="token constant">Slack</span> <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token constant">Notifier</span> <span class="token punctuation">.</span> <span class="token keyword">new</span> <span class="token string">"https://hooks.slack.com/services/XXXXX/YYYYY/ZZZZZ"</span> <span class="token comment"># sending links in message</span> notifier <span class="token punctuation">.</span> ping <span class="token string">"<a href='https://viblo.asia'>Viblo</a> has some errors"</span> |
2.5 Format message
- To make the message easier to see, we need to format it beautifully such as capitalization, underline, listing by list, …
- I give some examples:
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 | <span class="token keyword">require</span> <span class="token string">"slack-notifier"</span> notifier <span class="token operator">=</span> <span class="token constant">Slack</span> <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token constant">Notifier</span> <span class="token punctuation">.</span> <span class="token keyword">new</span> <span class="token string">"https://hooks.slack.com/services/XXXXX/YYYYY/ZZZZZ"</span> <span class="token comment"># in hoa</span> notifier <span class="token punctuation">.</span> ping <span class="token string">"bold text: *in hoa nè*"</span> <span class="token comment"># kiểu danh sách liệt kê</span> notifier <span class="token punctuation">.</span> ping " <span class="token constant">Here</span> is the list below <span class="token operator">-</span> undefined some variables <span class="token operator">-</span> undefined some method <span class="token operator">-</span> code như <span class="token operator">*</span> beep <span class="token operator">-</span> <span class="token punctuation">.</span> <span class="token punctuation">.</span> <span class="token punctuation">.</span> " <span class="token comment">#Blockquotes</span> notifier <span class="token punctuation">.</span> ping " <span class="token operator">></span> <span class="token constant">Leader</span> said <span class="token constant">OTTTTTTTTTT</span> <span class="token constant">What</span> is your opinion <span class="token operator">?</span> " <span class="token comment">#Code Blocks</span> notifier <span class="token punctuation">.</span> ping <span class="token string">"Some `formatted code` displayed"</span> notifier <span class="token punctuation">.</span> ping " <span class="token constant">Some</span> ``` multiline formatted code <span class="token constant">Another</span> line``` was just displayed" |
3. Send notification when there is a slack exception
- Install a gem
1 2 | gem <span class="token string">"exception_notification"</span> |
1 2 | bundle <span class="token function">install</span> |
- Here I will configure the channel #exceptions to send
- The basic configuration will be as follows:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <span class="token constant">Rails</span> <span class="token punctuation">.</span> application <span class="token punctuation">.</span> config <span class="token punctuation">.</span> middleware <span class="token punctuation">.</span> use <span class="token constant">ExceptionNotification</span> <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token constant">Rack</span> <span class="token punctuation">,</span> email <span class="token punctuation">:</span> <span class="token punctuation">{</span> email_prefix <span class="token punctuation">:</span> <span class="token string">"[PREFIX] "</span> <span class="token punctuation">,</span> sender_address <span class="token punctuation">:</span> <span class="token string">%{"notifier" < <a class="__cf_email__" href="/cdn-cgi/l/email-protection">[email protected]</a> >}</span> <span class="token punctuation">,</span> exception_recipients <span class="token punctuation">:</span> <span class="token string">%w{ <a class="__cf_email__" href="/cdn-cgi/l/email-protection">[email protected]</a> }</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> slack <span class="token punctuation">:</span> <span class="token punctuation">{</span> webhook_url <span class="token punctuation">:</span> <span class="token string">"https://hooks.slack.com/services/XXXXX/YYYYY/ZZZZZ"</span> <span class="token punctuation">,</span> <span class="token comment"># webhook URL</span> channel <span class="token punctuation">:</span> <span class="token string">"#exceptions"</span> <span class="token punctuation">,</span> additional_parameters <span class="token punctuation">:</span> <span class="token punctuation">{</span> icon_url <span class="token punctuation">:</span> <span class="token string">"https://image.jpg"</span> <span class="token punctuation">,</span> mrkdwn <span class="token punctuation">:</span> <span class="token boolean">true</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> |
- Oke is good, now you can try to make an error and check the message at the slack.
- Also you can refer to more about API integration here:
- Slack API – https://api.slack.com
- Slack – Incoming WebHooks