From d021aebf54e2afc549a73a4045df1b42ab078fbd Mon Sep 17 00:00:00 2001 From: acrefoot Date: Wed, 29 May 2013 11:55:59 -0400 Subject: [PATCH] Update API Docs to talk about Bots and how to create them Since we've made it easy to use bots instead of creating entirely new user accounts for things which act as bots, we've needed to update the documentation. This commit covers the static html documentation we have on humbug's API. (imported from commit 4ddbf0331588b0f463a9920b4cd363b68e811ca5) --- templates/zephyr/api.html | 37 +++++++++++++------- templates/zephyr/api_content.json | 6 ++-- templates/zephyr/integrations.html | 43 ++++++++++++++---------- zephyr/static/images/api/bot-key.png | Bin 0 -> 18442 bytes zephyr/static/images/api/create-bot.png | Bin 0 -> 10963 bytes 5 files changed, 52 insertions(+), 34 deletions(-) create mode 100644 zephyr/static/images/api/bot-key.png create mode 100644 zephyr/static/images/api/create-bot.png diff --git a/templates/zephyr/api.html b/templates/zephyr/api.html index fbaf8d2399..f792d664bb 100644 --- a/templates/zephyr/api.html +++ b/templates/zephyr/api.html @@ -20,16 +20,21 @@

Installation instructions

This package uses distutils, so you can just run python setup.py install after downloading.

+

 

-

You can find your API key and allocate new API keys for - bots/integrations that you run on your settings page. - Create ~/.humbugrc and add the following text to - it:

+

API Keys

+

You can create bots on your settings page. + Once you have a bot, you can use its email and API key to send messages.

+

Create a bot:

+ +

Look for the bot's email and API key:

+ +

If you prefer to send messages as your own user, you can find your API key also on your settings page.

+

When using our python bindings, you must specify the user and API key. Alterantively, if you don't, it will look for these credentials in ~/.humbugrc, which you can create as follows:

[api]
-key=API_KEY
-email=EMAIL_ADDRESS
+key=BOT_API_KEY
+email=BOT_EMAIL_ADDRESS
 

Don't want to make it yourself? Humbug already integrates with lots of services.

@@ -56,7 +61,7 @@ to pull out the resulting HTML :)

Stream message

curl https://humbughq.com/api/v1/messages \
-    -u YOUR_EMAIL:YOUR_API_KEY \
+    -u BOT_EMAIL_ADDRESS:BOT_API_KEY \
     -d "type=stream" \
     -d "to=Denmark" \
     -d "subject=Castle" \
@@ -65,7 +70,7 @@ to pull out the resulting HTML :)
 
 

Private message

curl https://humbughq.com/api/v1/messages \
-    -u YOUR_EMAIL:YOUR_API_KEY \
+    -u BOT_EMAIL_ADDRESS:BOT_API_KEY \
     -d "type=private" \
     -d "to=wdaher@humbughq.com" \
     -d "content=I come not, friends, to steal away your hearts."
@@ -77,7 +82,9 @@ to pull out the resulting HTML :)
 
#!/usr/bin/env python
 
 import humbug
-client = humbug.Client()
+# Keyword arguments 'email' and 'api_key' are optional if you are using ~/.humbugrc
+client = humbug.Client(email="othello-bot@example.com",
+                       api_key="a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5")
 
 stream_message = {
     "type": "stream",
@@ -105,15 +112,19 @@ to pull out the resulting HTML :)
         

You can use humbug-send (found in bin/ in the tarball) to easily send Humbugs from the command-line, providing the message to be sent on STDIN.

Stream message

-
humbug-send --stream Denmark --subject Castle
+
humbug-send --stream Denmark --subject Castle \
+--user othello-bot@example.com --api-key a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5

Private message

-
humbug-send wdaher@humbughq.com
+
humbug-send wdaher@humbughq.com --user othello-bot@example.com \
+--api-key a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5
 

Passing in the message on the command-line

If you'd like, you can also provide the message on the command-line with the -m flag, as follows:

-
humbug-send --stream Denmark --subject Castle -m "Something is rotten in the state of Denmark."
+
humbug-send --stream Denmark --subject Castle \
+-m "Something is rotten in the state of Denmark." \
+--user othello-bot@example.com --api-key a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5
 
diff --git a/templates/zephyr/api_content.json b/templates/zephyr/api_content.json index 493ef9a957..6d6563900f 100644 --- a/templates/zephyr/api_content.json +++ b/templates/zephyr/api_content.json @@ -1,7 +1,7 @@ [ { "endpoint": "GET /v1/messages/latest", - "example_response": "
{ \"messages\" : [ { \"client\" : \"website\",\n        \"content\" : \"hi\",\n        \"content_type\" : \"text/x-markdown\",\n        \"display_recipient\" : [ { \"email\" : \"wdaher@humbughq.com\",\n              \"full_name\" : \"Waseem Daher\",\n              \"short_name\" : \"wdaher\"\n            },\n            { \"email\" : \"othello@humbughq.com\",\n              \"full_name\" : \"Othello, Moor of Venice\",\n              \"short_name\" : \"othello\"\n            }\n          ],\n        \"gravatar_hash\" : \"948fcdfa93dd8986106032f1bad7f2c8\",\n        \"id\" : 400,\n        \"recipient_id\" : 101,\n        \"sender_email\" : \"othello@humbughq.com\",\n        \"sender_full_name\" : \"Othello, Moor of Venice\",\n        \"sender_short_name\" : \"othello\",\n        \"subject\" : \"\",\n        \"timestamp\" : 1365532669,\n        \"type\" : \"private\"\n      } ],\n  \"msg\" : \"\",\n  \"result\" : \"success\",\n  \"update_types\" : [ \"new_messages\" ]\n}\n
", + "example_response": "
{ \"messages\" : [ { \"client\" : \"website\",\n        \"content\" : \"hi\",\n        \"content_type\" : \"text/x-markdown\",\n        \"display_recipient\" : [ { \"email\" : \"wdaher@humbughq.com\",\n              \"full_name\" : \"Waseem Daher\",\n              \"short_name\" : \"wdaher\"\n            },\n            { \"email\" : \"othello-bot@humbughq.com\",\n              \"full_name\" : \"Othello, Moor of Venice\",\n              \"short_name\" : \"othello-bot\"\n            }\n          ],\n        \"gravatar_hash\" : \"948fcdfa93dd8986106032f1bad7f2c8\",\n        \"id\" : 400,\n        \"recipient_id\" : 101,\n        \"sender_email\" : \"othello-bot@humbughq.com\",\n        \"sender_full_name\" : \"Othello, Moor of Venice\",\n        \"sender_short_name\" : \"othello-bot\",\n        \"subject\" : \"\",\n        \"timestamp\" : 1365532669,\n        \"type\" : \"private\"\n      } ],\n  \"msg\" : \"\",\n  \"result\" : \"success\",\n  \"update_types\" : [ \"new_messages\" ]\n}\n
", "returns": [ [ "messages", @@ -21,7 +21,7 @@ ], "example_request": { "python": "
client.get_messages()\n
", - "curl": "
curl -G http://api.humbughq.com/v1/messages \\\n -u you@example.com:a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5 \\\n -d \"last=102345\"\n
" + "curl": "
curl -G http://api.humbughq.com/v1/messages \\\n -u othello-bot@example.com:a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5 \\\n -d \"last=102345\"\n
" } }, { @@ -54,7 +54,7 @@ ], "example_request": { "python": "
\nclient.send_message({\n    \"type\": \"private\",\n    \"to\": \"wdaher@humbughq.com\",\n    \"content\": \"I come not, friends, to steal away your hearts.\"\n})\nclient.send_message({\n    \"type\": \"stream\",\n    \"to\": \"Denmark\",\n    \"subject\": \"Castle\",\n    \"content\": \"Something is rotten in the state of Denmark.\"\n})\n
\n", - "curl": "
Stream message
\n
curl https://humbughq.com/api/v1/messages \\\n    -u YOUR_EMAIL:YOUR_API_KEY \\\n    -d \"type=stream\" \\\n    -d \"to=Denmark\" \\\n    -d \"subject=Castle\" \\\n    -d \"content=Something is rotten in the state of Denmark.\"\n
\n
Private message
\n
curl https://humbughq.com/api/v1/messages \\\n    -u YOUR_EMAIL:YOUR_API_KEY \\\n    -d \"type=private\" \\\n    -d \"to=wdaher@humbughq.com\" \\\n    -d \"content=I come not, friends, to steal away your hearts.\"\n
" + "curl": "
Stream message
\n
curl https://humbughq.com/api/v1/messages \\\n    -u BOT_EMAIL_ADDRESS:BOT_API_KEY \\\n    -d \"type=stream\" \\\n    -d \"to=Denmark\" \\\n    -d \"subject=Castle\" \\\n    -d \"content=Something is rotten in the state of Denmark.\"\n
\n
Private message
\n
curl https://humbughq.com/api/v1/messages \\\n    -u BOT_EMAIL_ADDRESS:BOT_API_KEY \\\n    -d \"type=private\" \\\n    -d \"to=wdaher@humbughq.com\" \\\n    -d \"content=I come not, friends, to steal away your hearts.\"\n
" } } ] \ No newline at end of file diff --git a/templates/zephyr/integrations.html b/templates/zephyr/integrations.html index 9ff3e74d1c..1052f32d32 100644 --- a/templates/zephyr/integrations.html +++ b/templates/zephyr/integrations.html @@ -22,14 +22,19 @@ for thee! (Or for a team member of yours, I guess.)

Getting started

+

Many of these integrations are available in + our API bindinds. You may either send messages as + yourself or use a bot which you can create. Both options are managed at your + settings page.

-

First, for most integrations you'll need - to download and install our API bindings on the - machine where the service runs.

+

Create a bot: +

-

Next, please visit your settings page and - create a Humbug bot for the integration you are setting - up. Each bot gets its own name and API key.

+

Look for the bot's email and API key: +

+ +

You might want to take this moment to ensure that this bot's + email address exists on your company's email server.

Then, follow the integration instructions below for the service you are interested in. It's as easy as that! If you run into any @@ -60,10 +65,10 @@

Beanstalk

Humbug supports both SVN and Git notifications from Beanstalk. In the beanstalk web application, go to the Setup page, and choose the Integrations tab. - Choose the Webhooks integration from the list presented. Make sure to replace the @ in your email address with %40, + Choose the Webhooks integration from the list presented. Make sure to replace the @ in the bot's email address with %40, as Beanstalk's website will incorrectly refuse to parse a username containing a @.

-

In the URL field, enter https://email:api_key@humbughq.com/api/v1/external/beanstalk:

+

In the URL field, enter https://bot_email:bot_api_key@humbughq.com/api/v1/external/beanstalk:

Congratulations! You're done!
Whenever you do a @@ -89,17 +94,19 @@ namespace :notify do desc "Post a message to Humbug that we've deployed" task :humbug do - # this will post to Humbug as the user defined in ~/.humbugrc - run_locally "echo ':beers: I just deployed to #{stage}! :beers:' | humbug-send --stream commits --subject deployments || true" + # this will post to Humbug as the user defined in + # ~/.humbugrc if you omit --user and --api-key + run_locally "echo ':beers: I just deployed to #{stage}! :beers:' | humbug-send \ + --user capistrano-bot@example.com --api-key a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5 \ + --stream commits --subject deployments || true" end end

Some notes:

    -
  • Make sure you've created a - filled-out ~/.humbugrc on your Capistrano - machine.
  • +
  • If you prefer to not use --user and --api-key above, you can fill out ~/.humbugrc on your Capistrano + machine. For instructions on how to write that file, see the API page.
  • You may need to change the deploy above to another step of your deployment process, if you'd like the notification to fire at a different time.
  • @@ -127,7 +134,7 @@ specify the email address and API key for your Git bot:

    -
    HUMBUG_USER = "git@example.com"
    +
    HUMBUG_USER = "git-bot@example.com"
     HUMBUG_API_KEY = "0123456789abcdef0123456789abcdef"

    You can also specify which pushes will result in @@ -287,7 +294,7 @@ following, to the stream commits with a subject that matches the re For self-contained JIRA installations, this will be atlassian-jira/WEB-INF/classes/, but this may be different in your deployment.

    Edit the constants at the top of org/humbug/jira/HumbugListener.groovy and fill them with the appropriate values: -
    String humbugEmail = "jira-notifications@example.com"
    +
    String humbugEmail = "jira-notifications-bot@example.com"
     String humbugAPIKey = "0123456789abcdef0123456789abcdef"
     String humbugStream = "JIRA"
     String issueBaseUrl = "https://jira.COMPANY.com/browse/"
    @@ -318,8 +325,8 @@ following, to the stream commits with a subject that matches the re
           server:

    [api]
    -email=NAGIOS_EMAIL_ADDRESS
    -key=NAGIOS_API_KEY
    +email=NAGIOS_BOT_EMAIL_ADDRESS
    +key=NAGIOS_BOT_API_KEY
     

    Copy integrations/nagios/humbug_nagios.cfg @@ -438,7 +445,7 @@ key=NAGIOS_API_KEY notification messages to go (by default, stream trac):

    -
    HUMBUG_USER = "trac-notifications@example.com"
    +
    HUMBUG_USER = "trac-notifications-bot@example.com"
     HUMBUG_API_KEY = "0123456789abcdef0123456789abcdef"
     STREAM_FOR_NOTIFICATIONS = "trac"
     TRAC_BASE_TICKET_URL = "https://trac.example.com/ticket"
    diff --git a/zephyr/static/images/api/bot-key.png b/zephyr/static/images/api/bot-key.png new file mode 100644 index 0000000000000000000000000000000000000000..1d3daa61568ead6ff59795a2fa560c318d0280b6 GIT binary patch literal 18442 zcmb`vbySvH)IEwANC|?1w1^;*5`wfKBAwFRDcz|e0@B?e4bmdr-5?+--Cfdo*Xudw zyW{@8JMLe13`Bf+<9YU8d#$It{H=+El$biO2S1@&3M<81=X}<75Uw*(&E2P?eqR#2$fye8A<_>V(dfYwTp`U8e2od-uRlnvBjwv z7Q=gEV`H3o3VxEAgM3IAbw{*jG1vmP$vl1Q(VYN4(T&CSntxs(&r(sxS5(K>z+QWl6dE}G|9tLVz_#Ys!Bw+hWN7ylZn<$OK<`_rnUt)&Jf!W$p117K7r-g7m+iB6TzU(@Vtl z3HW4s7JZu8?da}KQ?IhW)m3}GC+57rLf&xq@AWTA22P;={iNM+>LZFH5>DHP6cn$n zxF0@z@APNszLHetV1I!opZQdEw&r0YI^)iK5T9rcH&sF1C1*oJ15$KM%-shMsQLfC zo#U7Avyd}I4X2iwli4P35pi+4!YNRVDeYb z*x5(;MvPd^CM!$oo#WWvF*{DByhe{@dq+dR7rn5w6dE4>_`~1D3tqUKg^gg+sz>tF zS1mQ;PwihxdO}5Iz0iKw(=IV0^-xGiDB}C{=%~`_=HJ_ss%T?Y?cJGeQm%97si>$x zdi?k?_Jaq)XNQ~DMoZtt@qgc5U+?}@ zM#j2x<~-Fh2HWXOsidXNvS~J@Qmc6(li}QKk6Ob%(hTt!ox{=VL0WxwW;<-UKeO`$S@5Vv_MM8e*TD-oA5(ik%%F3k!?WZmrqp zE=6HsA+`1I@6CGitpRkJwejKM;mG9*>zb5iR&W;#jYpThZ|!}p_F2lR#s07)s=NaLqlcPW?#U{E%`ClK4fI<({g(I z_MVK4jM+qa2;BXjjweZ4rlzz>kN!p`&0LX$7l%&sZU2C)i%rC~$jajI^Yb^iw5&$4 z8~sG`@bK__dWY{jD*KI++oVedt+k*E)TYf*>3HvXLD_C$Azcw#YIYL>d8Ww z)K8O=n>c4*zH|f-u}AZ|Ie%!bEsUPc&x^S-K0dNZenmS%wgIM-_+EUL8H1oLn5xdya2Y?_XUW@oi01q*>G+57n9gvssHR!v>~!+FK2SPo*_W1oxhmDU!T z-ncyfBjsj&mBo~;S;u>@KJtW?w(DU9J2SJ+O#O$OYfW;^E)aw8)xeSJa6ue@PQtq;6KC>U#(g_X9eI+p#pNl9c9v8+r=%a_GO z_esJ~yb0lY11fBmaq#eNy%$YSvELlu>-Z=A42QbBzdEbCqP2DEiG7ZG`}Q*>y!-d{ zcg`!86ImXVVf}=)L)M?k$g96dR ztk;gM;dUTjYBr|xOi=i5HsyZRQBzjt@ZmA(UfVcr#OErwQ+7vlLqkO^E;+eDWPEGh z^2vEii`eeAhSt{BnF^uQ{-oKgmFVc$*ge>m`_ZxY9&&TXD;FCuxgJ|KHZ?5{QXm#? zH<$A0eM9-F%U05x+N>L=4HaY8tgWrvJ3DFQ=PqV8SmY&4OujYPK=!!k$tP75|1v)_ zQ$N?@r~F+Hb#uIg)^a}2$LDry0MQ#Eq0g=#|87QN$wF;m(W)1HmB)+Q^+P#|mE9D3$G1R;uyx&Xg9=zC6xNvn|iOsTE8`BNml>RJ*$n`!Um z#o56X7AEFm8<|J$k0Zy6Q#;RPI3Toz8(#Pt)FaU^8z@dpN@8;q3-DChV95!8bwG4L z!N7a)?axd%=ih9WVoji!-nqZh@446&MI?Ul!myVZGU$i6IHD&~i3>>{mrSDuKfm(d zLam94!l#MooJr}kTOYoQgY(hX7nPixTtBw)dv&f_MQDBfOTyD{dJ2UjrytEUV2J#WF;8{WYrAR5e9=Ykb7EIi*^ z?7Fr7fQU$Od?&uJ@Y%($P%J`rb7BSt2Dpaz&IfBU#Rd|d%C>WJb4ulwr&mBKw5H!LXpPX&iRk&Yp5)cq5si@3tZc4xb}-y8o{y zKd!+4|M$tE|AI5}|NYL?Jo9@DJL4s$IP(A859vq9OcjxtKUZxl_viptDXNJ40|C9i z%4T<#a1%uSO*Q1ra{qI8|NCwK_fq^H*U&6SM?-@KrFqKZ$_@21cAuzqfkMvi(NWv< zbP{Y5(oP@W)y(#GUv~^k`u%3zsF)bvx;j2j6fA}vl-1NA-cTe|@@N9M)F#p*-_i$(1T72qs3#~Q@~4V;&7`UGyvgde~3D zKcb)@fU}yw<*<}jHuZ>xMpQ+GI~*eXXX+a)fYS{dW5w`^PfMjH*W2(LvM1H*c z9SJb&{Nf^p-GY?Nk z?Qk|$ewQ&SD=Pyq$$ooQ?qDzzrRo0ku*#$}{OR%8naynDO{B}ybw+q^s3ZZb;n-55 z*3)SsxVd?G%0)Ui0S4bHczO?w?cMmN?ChsdKgr>wGS(h9Y9-LCmVWIwDl98Qpc=rG za;ZX?Z)xrmv70}J=lJ_$P>Dw)YQ^es9uXu0@dQr!z>F_AH*enD1uQr_JIkLbnc(B& zQ{Uaak$n2=n|zLspI@rW(bnkL*tJ5tbpYsT|K|vA8sM)Ki>DKa<-?Ol!gp!KtGnd2G$_Qk*+4X|DrIHbi>t7+W zyY9B&+phgWZRgu_f(8N5=>r~T*7>%eYN3T0oG6^Vl``BIpi|LnN|v>-OuO|!HL9fJ`wEB@F{D5K_gvOra*%S@|B3F=-k>+ z&gsbZR81G`Uo^K9Gk~#1sAf=-`QDBJ*y~Q@Ap)$QA(`+6KJu{Y8x$!eWo3fLN6$@u zA&Ls2sLvZMwGgf@fPL-3Yp?0!AbGBrFEq)TL5mqoYXDPCq>bYc6BL!YD4(Zp#=C3=9BRKpq|*c0JoH z6MXY#9rqG;YP~Mgeq;1QM8tgvB|RuIN~)@<3OQnQS5v{i&-%Kf_SJ`yU!mA{sQ z`343W9Pi8yNDFX_bksn3?e7oabvrH8ZM);i_&)53)OX`Ss_`<5z8}Ve(J!nXLA_3& z^3KVj4fgm^3{iEuXt(w&WZ3;PWcAs_#n-mBtatC;{gtmC2RnIP8iE%oT$IwH?t<-= z_Z|Jq^AlnY>rc9Ef%kuB&dtw@$z!c93;1;6+`IQlA&2t$^9bmg)}qL`?EUXj2qDb? zhJwDNt2zk27h6p8LTPJt*{)HXbC8c>P#>+Z$#jpe!RWXx`P@ zq6rQUZ|;nst$;=-rqdjjQ&Lj$e7B8kVPOGDOJDyrB#^X{Br6{0eXZ4j^y-tPxbmth z+`D%_6csT+BDtk?v^D8^b#VmvA~-l0>3vNNkGs43;&5hK5;{3eSIsOV-{mnyPaONm zlgZ@d;G9^x3j>-?C4`E@rD0hhK`}^;bk&ziwlatD% zPc(OqjVXJiU-AHANP#sG6cofJCibtZ^N8sz{r-KfYP&X7B#erf)7HmkxmO!HGkW?5 zaFdW2+Zr1`W@S;EjO6zK3ObnQG9CK%y2kkcmgGrxcD6qedmxoWY`AGsDB>t!5C(ky z`t_l>gal^m&uOu}?Su~3do&Sf>9QSM+tr>zsk4we=y$6`v)|%iW50)gx8Q5i9iCE? zH#fnQO@qu^YA19 z{9j{Sal1TOrlb}Kzy2@Tai1Peb=}n^5kPu_?r8E?)}N@KFw?#HrwWS7PBj5j@E=10 zx#gdp@PAjl|0$3EQ~bGyIxnac*e#~Qv(Wxl+gFDUN%;$4S&1TlD%*q%D0ic6i|9B1= zE|rdsj>gu}|G&FUm>}~j5Ace)-)}t7Mir@*PVV`SLb&L>;(&F+^JyVQ)R#wOOX10kxnd<~iZA}>M8ftQlK6jaHps3%ww zq|woyuk56i!!=35QtP|%=r%~*<3|0y%3nv5rfz5?-Qb?l4or*E_c-d1Szl-i{WlOI z!Y24+AH~}HIcVA%2pk1Ej>lLZ3K4GSRyCi5@8!(xjl>q6C1J2#hMoQVE!a!ulaNk8 zNTQchVs`t>%*AF%7JUL)*Ckp&4z|2cyf>bJ4-Nw4tgIOMdN$9l3U77owGTc^_oUsn zKhp0$B`TM|T56l`;MQ!TxH=$e2o6DJijvNtTw?6%_)zZgkn_e|6S-7E9XAhwPC3U7Hkq^6ZL+5BMgsRTh)6X=a-j_4}0`ATzexN&Ur4~c(}Og{E3$T zT=n!aID6;^1YyeyN4&7EGw30-wy}|+zV`r9>gHw-fbbn@T`ep!UVmtyrlzI_Vg*jW zX34@4;$I)m15{Srum`=F^-4 zsqvZQWc!Voqp+*qu%!J#Q~#3_I-AcJ2HIN4e54}vagOeZ0|BSz3h|YZ-C6pXB5YRr zM#U!LTT4`o6b$XWv*`DzjDN{Fw7sG@ieA{th$7%B7nHsz}TR z2foBRMHK02xwdXw+PMHt5T~j)UlqX9e zj}QZ$f`n9`Lnxhlv&;I^Ca#!uurHlDwWeYSL2ZQEQ zE{Rc5Z(tcHN9T4akMzX_RfoPmBB%G38(~40qVm6ou~#55KNclz+VEnVfr}4at5vfj zm&Ya`h)YpdC~4gPw-Y{>s>|m~>jcxXf#c~F6@Sz1-fjvGe~tSh^ro16q+bl@7uEd# zFn^&-eb2>&9VUp0BByb<-f=9!^z|CP9z{KmQ^@!TjuJZh=C(Ezs9~$q_c!2T z5hw^4MP{?nX8_x;Eli&{0_~_)VeJK^=`;P#dnQBQ5L*Qu{cU)$9`I!w6BS`KE=K_P z8UdDLcG}z7=`VH1oGwiwH|l^pTNMSnxiQSUfx6= zm&0J-vZ|f_WXb15x=#Yauw3~`E-NRu3UD5vE**AI?*N1TD_1#e zbud$|*r4Z;uEKcbmoH*lB=iy$c29~&H82#;j*D%BGHsm{rUL(Di!}dTU}yH#O_ymGKbfG$m~S8!%04i=N0H$ z%5kO7>1C+H&n+L;o!@UWXGsnqQC}M?r0BNv2%YfDd>uh#lN1uduc!C;x#{qYJqw0E z%Sj%xfDI8H6QcT;nBqgJzeB=_=;#69KHznA{J<5oX3L3#gR?SL`~;$7x!D)@boCpw z0k?18)>>!}iH?r8TpghF+yt)jRT8h;&e0Kq6_1XKV*w@~_V2Z&Wnry3>~aPWCm3YB z#EOcFz-Us|tf49#|PzZzew?(lD z2s(hNZ%ldZhu|LY88rm+6#i^gZ4Uqz1#;jGAoG}K+Q=Ln9I)Rcnwpvb#5<>IT%gC% zo~*R1zPda^GMlbVfPet00t1g;0L=k(hN=Z`)Y{kvln%ml4EK(Sc}f^I+m-2cMtj zY#qf#_LiBqS7-azc$X$K$T-2fTNm!-pW3|1qpz0f49!hOubhywN*pZyf3|^>}h6T_*SR2Y!F1`gh#&d882|>hUzmM9CNUmAdL~Le0 z0?G9a4c8JR-zX^HA@TC^LVp;Nm>39s1CV^Teh(FBk|E*a;{yTJ$8$uC1R00o`Ez+q zc3fOsP#aRGN1BGk-tq+HVBxh+OvHD0ivuzC?D_K+pt+ha7uMHRX9$rXNf<(ejgF7Y zW=fJk8zChvjSZyztIWaOwVVPSGqdh4#yWra%qNoZ)P-(>f;XU@XaH~v4BX}MJeK?A zi6JyTR+g4XU!f*6x3*eeo;$%Ki1ruhI?A2L)YP}V1R4+7V6Ry3mopX&E?*K>1x_I+BkB*Ef(ML3DX}X5l&F_ifs9 zUC+Q^Zz;|qMK;@Ls+z;z-X80I@xU+n@Q;-nL1A~t%14!d4v>>0S%;Z9eKc#vi>F_hr;z!6g1CL~ zzOvAV)78rh56Q?#vNDY{r*}`f?+FP`%Sac;-cO@?nRsU)G;7uD^*)LIhYKE2*H2lZ z-?|Iqqcog-;aDd38+;ArrrerH19B;hy&Phk(&Zxa`k~q;+G|_eJFIy6up1ad9DZu57u?7w+dTfW)US z;>&(Z16!yCRA;VI5%PQTSD#nBr@2Snjg5_=49stBneW6_RdGRUf3p-?=w#R;B(t&a zUXWU~OiaFj9INS{Cr$l~g=HSlNpo}a4lL?g89NKh^{-a*t+2|7u$-8f*e|$(3PYz> zE`6mdp2xsF?^uW#5D?&3!%~o*o_>ik&C@cpeQ8%+U5&P1G|-&;!|pz%<0oy7rv!wx zr!0vjWcGU9A5+yT-NT|(hB91o3@|QMg)T*pFfCB4o$IOc}5IJ=8_TP0pU_eVp#YO&Bv>$~1+0NXjCgA27!xC9forebp+d;jsd}%ovd52rS zzrX(uupW?_j93YCb92$u!tJ+>7HarDr$@xZbc9g6dGJgNiH(g7*e~dsW!9|WNrk1Q z84lZ117V4e7ROK`MD;@)7y$S*gZu=sTI8^;0o(MJ;X>r}D3yTK2;1`(CXIap@IyQ2 zfBNPj@0*$BHkcL_6_uBl-#gy5_2BdQ@A zMvq{7jK{uHLc>Z0`UiXhqJ4%Md<>$(?%tlxNWS_8s4r@BR-h7SIL_Ym)Q5xhdU%`E z(9lpvR~KCkNkg`~S$E$@w=46VKP81&Q)dT>RWZx#{(*RFYf!D(e_ntqdx|=7ue;RZ z{9%06G*YRl%OiK`NacenQe$msp9ei9(iwH8@|wiovOe^_Y|dD)VxD8TQ;K)$>{fin z7B~H_o~y>yi1)xcSzk@WRZGV$9kt5vP%v*OxxaB*n_yql5|cGJr@!CE{e_rjL7V@q z1ZqXd>!5Z;NdCo%kD-eEReWIEMEjA$RlhPvkVzs~tlCRAA%b z37MNSkdl(VyxjS`u%HK-WcTNMLh<+S&w%98Tu>SwtcJS>@f(MbQ1s&T05T>y7niCB zQ;MU&)n$Y(*$*JTn3(Po5fL${m4DSF#m9dmDR~D$Bn=PaB}gioBerkeYG;Q378YqY z;>_7BVI;YqW?v!?0PoZfkp#NgYiDOp=&^4AZ4k1vV+nxq4J7kX5G0Wf4-W-jzqUHs zQU@_o7~UI*8KV*v5Dl%YtslYhhS&Yflp+I?NLWGwlCp0Et>PXKur}w%R!e+qnxXYvGb%7HZH7s18CSD$0I&x$B+&DcGBckfx$dC? zvy%zD=F7{Q6R$pFkh8MhgPH(_02Q;p0buie{k_xg`Ixer8D+dGre$SXDoQCah?`6tngL(~E76l;UQcqlF9hGjw$D6<##LWyy5MbA*AhfEn-$I1oO9NCMnt$CVBn+Y)d+ zx`1BKcbc$XaB?!6PrLvUj~~D~fU9JwB;H)rvOu@9!~O~zLtvGiHcLh5J#W*}Jxt~6L`nEtL;U+rXGZ4cND7vhS z9YJ}+4Yst3znxsr0R1Ep15I5<_f}^=03?ugR$q}RG>M_W)Ws}DLc+KVL$nx@p= zWri<-Ie#ge=HiaAu^0e%A`b<Atr5m`efG1nDVvWHB>#c8%u82%%PSjg`SaMy(2FA9U2kI25iOkzC67M{qA6lk{f z_ZKxDK6R6RTf+Mkcr5NnvfWBFPIia+R!mu0+4iokuq?iL;CBGgHa9h;3LMe?-_I@j zPfVNJmHkg?bL4C{<3MO+jx-?Wu&Q911jKSnkaDaMTmRzFTh|dnq>8DCndqqy zGuW!Tsyk|L?|sO^9+o>n$862KS9WsMS8QFp*VWZUt{5gJsd2|7FILTt!6c6m3|b0N zSLI2v$=x2*5f5ksWC(JeDG=(K=zQrE_R98sn$emOozu;v7^9o~y}r8{gI13A!iJWG zmQI5H01G|hCLWES$CX8FT|kU4K}PGzV$6dWEi*m;kO5(aZ|5&?==6%p#xz)QhrYuC<8~smCUK8A1_H_psu3glAd(G-U02YEbocq``RdEo(h?S}XrJT=-@x|);V#ivd2Z)}0&y|X{nbJ? zu?iNV*N<+Uk|7V7ebY8I_sjOp#=r{wN57SS`k^k)CaQT~FeNml9LK>6Zj0lt)yLpC z^2JI<*x%ma-cxc4#M-NH%xSH@_e{Tj7EvQk7qxsGOA;2@)T3vr;5Wt zq(_{RlEo{$``*?>O;bWQ7h;vK8Y){{33zk7x; z9b6nHHuuQ#OY={QrWr~Z%16tkdolHHyc z(D4-ua9MDBo;MYK=YZ>HXVrbo38I{{@6-^H(IELk&;uC1;`tDg5+I z@=el`<*~NF{Hw0FkzT$x6YUcnN1bN0*FRL{xwtc1%m>CvxFcKShNH7437O<^^6g6b zQLxeTjRi>rP*Oer93B3^JY(W9OM#i;HNtY%uWkv4$4)0QWh(0NdGSoo+1yg*7dJQ6 zOTx~8+Fu=lBQJPAv)`mV!r2eDgZMU2ed{2RuY@nXJOQlwFS~591QWX~^*pwc1k?G= z4GD?N*z)m8(csr1=IK+9n4gB4`i}Sr`#*d{{&DA%W#e3vaEJI)dF3tpEsT94;g_CB zt~_p5C3Y>s#{139;0qA>E7$uBbjU4RT^!mWU!m${vl)jnb{NJYJji9?$=vdfm0g)p%~`hNhGzp%ZK9V~w{l zX;(VkuLaCMV-u5z3)|jKw!&gJ%XOEc8S5v zWPi5Z=R}#mt-Z`IwjFsqwBJ;aLDpl++SWQDg#0w|fw8i2d;n+HYWrY(Aa_rP=@VZO z-=|hpSXCbF59|0@Z7q~m*_Z!4AkJ|5f0j$T^BmHmU#duNRN8$TN|u;p`;qQ~3LPftGCaG$^Up#9;-=bJc**cuzBxK-kM3w{*FGs9nH16Tevtqv3qjyc=Y z&MO2_yh)H-;e?c7d$1}Bo54A}Exc(`LTNb{gBya~&_IjAf$jXhCh9OWF+pR+8S*e4 zacOXE&za6U14vDOJr>RLQPGL*M`yK+)}sMYp7=F!`x)LASe3`NA@5Ol-`6o*wB!e? zZ`_{Zx3#uSUUwb6ctvHK_`bO04{p?i;wslQ+s*Nam6a7{3%SV6q#M8h=>dEy-Tq<3oXa$$nD!@H73aP16{UF}v<~Ktt!R9UbYDxl2b-^hseV4?`oVLYL}rev`xcpdI&5BF)C$3;@^|5LcO84$Z)!cMR0A z<95vvf(ile5>i?wKJj(=F}eFUQBYEcOb*Jpcr9m;N=r)@FPk!1%j6`XI~W|q)zxiU zasfr2!)opZv<|-*(b3R!hI5tm^Huv2d6Imw9OTzr^v5i;4>ZC21P#A<4D-z=Po5wl zsCXco0BX#GX)M^njyw@*dgJ7?6q}n)VXpFlf$P+=jq~wgFcPW^DQZy&Q|fPj1KYU% z4YaYAsNZ!969G1-BUP@GUL4n#o~@>f$Y0jHZ4WsEGzl$f8{k6Updc(DU@!<-ecr!E z0^6e9Qpe77%m3}1dkImSqC~ev?8Q^Er3Dxxco!re6-aAOz=w+ z6O$r4;DQa#p(BPkL>N`UzUlp~3V`r(U(yI4pW7)b;D47aYd@Df=qV67HSisU;P3Lz z-^SuQe+dl&2)c$qZ{G|(gB}RnzCuDN3OV4!bT48834#a|UaiJYsQa70M;`VbVFi`j zt>b}&o&kM(^=>N>G;9&s^fY2JOnD}5+bjL47^K|M;I-TZ_9`m-5?Y=|pnwBQDw{NV zy}YuL`Q11x*amzQa_ILiHpWZ*%BGyrk$~$2XGOX7A{r80ram~uY*z=oz?2sn8JWRY z2MRc_>fVSO1opHT=mJ=>9&m4fqcW?(Wg9LN0k|O|wRUD2PPadz@Q7FYt;Myp)Uw*$ zPx;<`W~1?;+1;cd`-TK2%}Dbl=*!i6owU$jC4s-%o%j$>1b zjE-)|MSAT<7Cwq(M zj5*nI#$e+^v`oOa{nAvk1j`C=(9O^yw*v9_(})%DJ1@eexWC#2Le9>?0loc-FNhU; z3mpin5xD!oPK!k)l_(A(u&VKV>@TP%v9NUH%EGFL&6 zjkeu4FbKo7>TQe`0lyhp34v#Y2s}m*oAkRPcPAaD5so1%Fh9r+O@l8KlZfq^)tn#_ z!Wja=2~FS~cuNFz0Om&oJ+*KKT{jn)x`??QgW-N==jT(eLZTBBdl6R$+yWB|3(K(; zFpU-Vn}mLN^g46Rz6i%U5Yg@z2a134hjrQt`5kC)!RF=-R*XM&R~JFRp&SBDFy{{bG)WB&jpQyj zS674_0pZfms0kSpZ0iP)KqxhS0wE)gjEsyhRKS=(TWiLO%QaSuDK*V4X#IB&4>NSz zQoP0V_4IaNA&ZRqA1UOic!44TL>!&lP}CZ-+I ziyDuYQ70Xo_?KAZJy$DTWa$-D*qqI~A3E`blJY)hc+1pOB9NszWx&zW0n-DL#4R}X z;7Wm+1fXm}^VO@6e->!gA?x;RI{+bW%Si$TzShyvXgKq_#>O4cTZ`tpKrPyTWpjs= zTNpfH(m6wvk!R1&h?(_-KO{d7lGOy(My1p&`|4-n3#*UdMMDaIPz)}Xl(#g9)*K=V z!skIa2{ExaNCb$15}JrF20gLbV5eRy&7#xyHP%0<0kQ*ARaF(7C=%cy<8a#3%kD&M zKM?D!z~jS`+iy?x0NVuCh5D%}()SSVxcK;r3umBki^snRNf(Ry4kHs6GOq8hUB4v_ z1SQakzCb^Q48Biepd z=$!i7Y1ioJh>U!Jw?CA*4DSnXoRzIy3F`y15(c~$v&k=NxPjL&N&?OEn>>ZVTxAwm zJ9wu#i1^cYwI@qN2v0e9XVUoOMzUlmE`rBVg61US*aG17d!Si-2gMN_k&d%o_`oVD zDJeNEmzWey9r1#TYdvUhX>k$uKjg}Dxtjo?%74Zp>je)} zCL>t){lJ060uvUVr~YJoi6DMj?XSpyBdzT-CXpyf5=0{o8Cf6rajz8?6*UYDd>=iY z@F-jYy^Pg#IJf;6Mi0#1z3b@g6oAepA|l=6%B$rGCugimiHWwpz85SRl&{n6mc}_b zwKKf?Nh#xHg~#_sYQ0)A%Mp37mYeZ-H z?xpeXl<(Z4;$(``zrn~{cX3FB1mTTv4$>CZMq@BYIPZbS z6t=R&WC(e$?I12T7Vpd*+~k4~x1&=mD^gYBs{}Pwrs$12 zFokIGU)-Y|@rT&OaEk|q<$b zeFa}*#DgTrCwl{8jH?CdG<3Xhw&4?^|FHlVjTVxFM9;v?3+st+kpl@1q8kDn;^E=F zZp{Sm!Rt~Bt6itjOF+w40>8`BF8^qq;f;8pnNEkEN@;JZM)1W+sabE&&o{y609^TU z`HQz6#;^|R47Mo;u$o$0ZUXZR_~ux8T`@-?0H(q`_2JxmUDD8tgZ&p_DhHXHRT%jT z?MQcbZugmM`044{*&iqZFxsRHo11p^Fr3W*3#9Bv3=DS?Bn>SamQy2DWkkOi>+jdV z53Pvr<)LfkEZ(|+;{){nFsg; zPCV%<`*&bbK)3+FHQn6RW) z`+m)Wi0Eh^I7SdINIy(R0^vAYAFRoH)^$OexVh&&kgrsfGP)-PgJuBtQm#T=ugpwg zbPn9S5ipGe(`cevS`RS^S$`(UAO`RFl>rbuqNMZ!92yL!Q(bd&NoVIu_t4uVDgo)~ zl#2OkHY^fQ!f-q14AQ>VvUAyTs!aV`hYXE!} z9uZl9P!nk7NO3(s=fc{4SGC;Jg?d?8rPoeSg z-9UY#2lVlHl~_3KBl64NIIstW_~-Gxp;|DB(|^B$9~Mu>ayx0jf(NSt&B`Jqh9__q z($XHgUtKr=U@~}i+0)SQ0i4S?jIKs7uCThgYWBMn6D|(oXCKpCPcMxx)N%U?+|vBX z(uLp?2ba`Xts57pou{eeFy2CKFS&^r4Iw4XClj#r;Q2yRmgW|@f7w}?2R<9f6^4tQ z5vQ7slr0oGjRhb09Kr%w6ft{ zxtt+HEa7XqhCqY1+QkgRa0ND3SKC){!$rDpB$IdpAW6Wl5Y}PDAB6CLhzgi8u|z0* zh$0A36^10C@H-bBR5-8=3=KtqD0P>RP({xbATkI|jo=0H65xlMM#FeRN5>1(fncIt z_u#(22xT4w$d$gAr4avs-SCK#AjrO3FN%UcJP`H+=2sw*ux_eGUdp{a;}yTEsB`m^ zeS3z7pVT;Bmdlnj)*YPw>dS>0Zx~F~!4wKqXoOh90ZsS}{EYDC-pcIJgeyfzWiS_W zfbWIpT-h)h4RVFeO#L{ zmOx(91;YspE>?^l{Q*?o4`WGcYHBM(IryO6z(C^rO1t$vnD2cC5C$egDLiL6^+VwJ zK{P2tLkB?$5wsYXYXJKH%SK$#DF;r<_mZr!j|3M6_k?#0&5~p?_67zA ztw25M>_h`pIqh+U`4T=Hj5f27`k;*gj9kF?B5lZo!+zrd5@=9OZEcyOZa++hz5q3V zbYgfHkv=6eb)gkTIK3gEtd7(;XnTNYs*k)xe5_(C837J`8pSczSxeADd~zMepl24h{_5Mng-1=!5`)y#-zK!r=mfejnAv zYIm$i7X?x=BNJk_6YTA;G&AAu=N1>`^<0rIlsmx5S!zBh3KO4S{H3fmRY@;0vkvKL zcwd)T$m~A-+X>2Ss^YPf_E86q_N}mc;yqV=ySjbHD?jZdOf>t)Ag26H6fDvOxU^e_ zcRx9Xz7`aG2F(BhyIpumLN}Y1nMoubpd14;l%3E8i*kRXY%b2PUP4eyFsbPWPCSqp znb_D`L9ap#mx8-$sW(9kU?;?vAzU-{Jv8Vo5CILcEdUC{yr-F&nNqbQ6WFX^lHx8< zD_|RM0OSwy?P8oo?JTgwNC=z*=4qiI(s!0W9DzRbf57w+N=gxU5fYMq*r5)HO1fbN5gE|%g>;J`sh zyl@=AecBHe!YTK&ceb4BA-kw|?jTf33N9`p@PF~1ZLq*xnV)|jWakImj?ZBHf$2e| ztdeV`!*(yUNQjAUG%sYBbU;X*2?^@SyNH?2VuQzq$jb0P1$ZF-Ux1!RVBY~3It)Cl zj1(kYdh=^D4@=tU%>8i8(5p2QhI{~OXzz*$3sZkb^zpEJO0J0dYjhU5lq;wG zXX1L$yTr5ay-O4wZg*kM7{LocNH845$)U=`;NapSSO_SQ2!+wmunmq3^zv2_B3mBd zF1oNo67WeOsc`2LD@i*BSwT}OHranpmI+J2IAXzgc)Inns9cdynt^Rngg z0&hrj+cn}ga*(>m*B8D-ZbC+ty3J^R;j2!?yw?)KYH2FHw5kCzDMD$ekTdpKB=Am`D7>Q<#3WpAMoX5&c98Dhb}c;j)vm|3B9kKYe#Eqef~p$_U>KD zwH`K!;<(mk^n*?;t@Chqqym43jE)TBN*SN=4EpdtC(oWWJ=tRwSMN}twRHrs=QOi#$MZCG`U(;We=u_ZJnto=eg_iYmz*Tjt z=frjHlX=vwcau#4?U=$Tw(s~Dn|Oe!aVxHP{w7beN#^8sA9~;JeqUzRK8@xNA!*b( zg*iO)Rtp`LTHl^gDmEP=rJ#HY0%7a0)nbziLP^!k7siP*&^xPa z`wfet3_6~l>2i1THQO5yb-cupY&dD!xcT?P)KT3sQpXGC>=vJEkk&O9*Cozox$euG zW`F-u(oQ%`v91)5`-rF)@rB#@5Vu#0vb>RR>Qp4g1{c2uJ)BEFyh=ZulM=q-%lfRw zd0UjvFm&C{#b-zUhtM>ZFI%Wnw{-X-+B zwdTpWcEJhXztzydz0=fu;h9AHcCp4@H`2RyXKQ&&*FqQT#Fli-5|5wqHb1uGqX%2Q zK0Yfhs&se{)^%CECE`nZrE~GDEbZT4%wH5-mR#A~i~1PN_&JO5OBVYV`0m60v5-(m z36mo2Gq$Y2?QHTJ5f49#Vqc>~l2>p_;nmI!>K{2>G3J5$sGMi0RKcIL!cVY5fv-&& zqC9Q%JQ;NO-lL5ho9s3+KiX@iYhi;`Wm?sqZmr~(Prl^GA2DQV*FgJsA1?M9G?P|W zq)v@62&wHvVI#jvKb_e*$3`(kiSEr%bSF-E*tosh1YgUC^lj^h0(RNbi(N8mXxt1z zJfSG&9W}(tp|d#Z!LJEI`1r$KwcQ-j>0hy%&$2@aTp&Qs&I38SEL$7c=#B zuhx*!>G05%(9vy7@0e;g#K%Re+C)d9+L-IGC26xIH9W)YUSe6vxYNY?wa-@EaBxxF z09PEth4odF5}9ToQ>zhYqa~+WuNHH?7V~@K7{%Hn^NxVY67`K-I03!76r~@`Uig*s z1-^fRq#Q~xL-2R?4Yif=GK!ym9wZ-6Ws7a1>P*<%^Q(`Gbt?-${o318DTH(R$*nAH zVVJqlu#uqIl}WJr?(qa~IVJl#3&s)PcEKcrUWo@8*Lr?Fiw*plwBJwS5ET)EHMuQX z@XqNZzE zqwFYEG-OVefvl@jKV3LH%I;CW@rbvQw|4mx=+7UekRhSVAns1^pPLkHwv_sR`R9L+ dj!aLNezild;n#Tt|7#DD$ZJW#d;zVG{}(LZ&MW`` literal 0 HcmV?d00001 diff --git a/zephyr/static/images/api/create-bot.png b/zephyr/static/images/api/create-bot.png new file mode 100644 index 0000000000000000000000000000000000000000..48601e4518b878770b45d62b1ca96be655c085c1 GIT binary patch literal 10963 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 ZweJ|>SwglkJbsFhd!!_t`@rD!e*rSvM~?si literal 0 HcmV?d00001