YouTrackでのワークフローのカスタマイズ。 YouDeskとしてのYouTrackの微調整に関する私の経験

「YouTrack as HelpDesk」を設定した経験についてお話したいと思います。



上記で示したリンクをクリックすると、YouTrackをゼロからデプロイして初期設定を実行する方法に関する詳細な手順が表示されます。 HelpDeskが大企業の通話を処理するように構築されている場合、そのワークフローの開発は避けられません。



1.申し立てを登録し、自動応答を作成します



私は銀行にサービスを提供する会社で働いています。 一定の時間まで、私たちはセルフヘルプのヘルプデスクを使用しましたが、それは惨めでした。 ある時点で、それを置き換えるという疑問が生じました。 同時に、この動きは銀行の従業員にとっては目に見えない/ほとんど目立たないはずでした。



最初に対処しなければならなかったのは、新しい通話を登録し、それらに自動応答を送信することでした。



登録では、すべてが簡単です。SMTPを追加し、電子メールとの統合オプションにボックスとフィルタールールを追加します。 自動応答がより興味深い。 最初は、notifyUnregisteredUsersプロセスに「未登録ユーザーへの通知の送信」ルールがありました。 その本質は、「コメントが追加されたとき-送信する」というルールに限定されました。 ただし、このルールは、自分でコメントを書いたときに銀行に応答を送信するのに適しています。



次のルールがソリューションとして作成されました。



rule notification about created issue when becomesReported() { ..... if (Customer email != null) { sendMail(Customer email, "Autoreply:" + " [" + getId() + "] " + issue.summary, "       \" \",     : [" + getId() + "]<br> : " + now.format(mediumDateTime) + "<br>      . <br><br> , ....  ..") } }
      
      





when issuesReported()条件は、新しい問題が公開される前に常にトリガーされます。 したがって、自動応答の問題は解決されます。

次の質問は、銀行のコメントを追加するときに自動返信を送信する方法(つまり、キャリパーの応答への回答)です。 解決策として、未登録ユーザーへの通知の送信を修正しました。



 when comments.added.isNotEmpty { ...... //  Last comment author  null,    if (Last comment author != null) { sendMail(Last comment author, "Autoreply:" + " [" + getId() + "] " + issue.summary, "   c    \" \"        : [" + getId() + "]<br> : " + now.format(mediumDateTime) + "<br>      . <br><br> , c ....."); } ....... Last comment author = null; }
      
      





最後のコメント著者の技術分野では、誰が銀行やサポーターを書いたかを理解するために必要です。 後処理の投稿ルールでは、「最後のコメント作成者$ {from}」を指定しました。これは、「最後のコメント作成者フィールドの値をメッセージの送信者の電子メールアドレスとして設定する」という意味です。

そして、ルールの最後に、常にnullを設定します。 したがって、私は銀行を書いた-自動返信を送信し、そうでなければ送信しません。



2.カスタムフィールドに入力する



手紙とのやり取りに加えて、タスクのステータス、所属先、タスクにかかった文字数に関する情報を収集する必要がありました。 これらの目的のために、「タイプ」、「批評」、「銀行の手紙の数」、「ポリゴン」、「リリース」、「締め切り」、「銀行の閉鎖日」などの独自のタスクフィールドが作成されました。



そのうちの半分は、ワークフローを使用して埋められました。 以下は、期限を記入し、メールドメインで銀行を決定する例です。



 when becomesReported() { ..... //        issue.deadline = now + 24 hours; if (issue.deadline.format(#e) == 6) { issue.deadline = issue.deadline + 48 hours; } if (issue.deadline.format(#e) == 7) { issue.deadline = issue.deadline + 24 hours; } ..... //     var bank = ""; var ce = ""; ce = issue.Customer email + "~"; bank = ce.substringBetween("@", "~"); if (issue. == null) { if (bank == "somebank.domain.com") { issue. = {- }; } ....... } }
      
      





コードについて少し説明します。 issue。{something}はカスタムタスクフィールドです。 プロジェクトに表示されます。 「issue」を省略することもできます。この方法では、issue.Customer emailとCustomer emailはまったく同じです。 そして、ここにvar bank = ""; 単なるローカル変数。



以下に、タスクを単独で閉じるルールを示します。



 rule CloseFromBankRequest when issue.hasTag(" ") { if (issue.hasTag(" ")) { debug("   " + issue.getId()); if (issue.Type == {Bug}) { //   ,          if (issue.desc == null) { issue.desc = issue.summary; } if (issue.solution == null) { issue.solution = "  "; } issue.ballis = {}; issue.polygon = {}; issue.causer = {}; if (issue. == null) { issue. = { }; } issue.Timer = {}; } else { if (issue.desc == null) { issue.desc = issue.description; } if (issue. == null) { issue. = { }; } issue.ballis = {}; issue.Timer = {}; } } }
      
      





when issue.hasTag-タグが追加されたとき。



このルールをこのように使用します。 銀行のタスクのリストがAPIを介して送信される独自のWebインターフェイスを実装しました。 「閉じる」ボタンをクリックして、再度YouTrack APIを介してタグを配置します。 このタグにより、ワークフローはタスク自体を閉じ、必要なフィールドを設定します。



3.さらにいくつかの例



タスク終了通知:



 rule VoteCloseIssues when issue..changed { if (issue. == {Fixed} && (issue.Type == {Bug} || issue.Type == {Task})) { var preview = " . <br><br>  ,     [" + getId() + "] . <br>    ,    <a href=\"mailto:support@bifit.ua?subject=[" + getId() + "] " + summary + "&body= \"></a>     . <br><br>      ? <br><a href=\"http://{link_to_web_interface}/report/Issues.php?api=vote&id=" + getId() + "&mark=good\">,  </a><br><a href=\"http://{link_to_web_interface}/report/Issues.php?api=vote&id=" + getId() + "&mark=bad\">,  </a><br><br>  :<br><br>"; var i = 0; var author_comment = ""; var subj_comment = "    [" + getId() + "]"; var text_comment = ""; var date_comment = now.format(mediumDateTime); var full_text = ""; while (issue.comments[i].text != null || i < 10) { author_comment = issue.comments[i].author.fullName; date_comment = issue.comments[i].created.format(mediumDateTime); text_comment = wikify(issue.comments[i].text); //    if (issue.comments[i].permittedGroup == null && issue.comments[i].text != null) { full_text = "<b>" + author_comment + ":</b><br> : " + date_comment + "<br><blockquote>" + text_comment + "</blockquote><br><hr><br><br>" + full_text; } i = i + 1; } full_text = full_text + "<b>" + ":</b><br> : " + issue.created.format(mediumDateTime) + "<br><blockquote>" + wikify(issue.description) + "</blockquote><br><hr><br><br>"; full_text = preview + full_text; sendMail(Customer email, subj_comment, full_text); } }
      
      





ここで少し説明します。



 when issue..changed
      
      



「ステータス」フィールドの値が変更されたとき。

 if (issue. == {Fixed} && (issue.Type == {Bug} || issue.Type == {Task}))
      
      



ステータスが「Closed」で、タスクタイプが「Bug」または「Consultation」の場合。

 preview
      
      



手紙の本文の始まり。 タスクの終了の通知、評価へのリンクがあります(すべて同じWebインターフェイスとAPI)。

 while (issue.comments[i].text != null || i < 10)
      
      



最後の10個のコメントを確認して、著者、full_textのコメントテキストを追加しましょう(これは通信の履歴です)

 full_text = full_text + "<b>" + ":</b><br> : " + issue.created.format(mediumDateTime) + "<br><blockquote>" + wikify(issue.description) + "</blockquote><br><hr><br><br>";
      
      



歴史上、最新のコメントはウィキファイ銀行の最初のアピールになります(issue.description)

 sendMail(Customer email, subj_comment, full_text);
      
      



すべてを銀行に送ってください。



特定のタイプの統合モジュールが選択されている場合、サブシステムを自動的に入力します。



 rule set_subsystem_if_change_gateway when issue. .changed { if (issue.Subsystem != { } && issue.  != null) { issue.Subsystem = { }; } }
      
      





期限(期限内に実行されるタスク)を超えているかどうかを確認します。



 schedule rule check deadline every minute [issue.Timer != {} || issue. == {Fixed}] { if (issue.deadline == null || issue. == {Fixed} || issue.ballis == {}) { //               ,  if (issue.hasTag("")) { issue.applyCommand("  "); } // ,    } else if (issue.deadline <= now) { //      ,  ""     if (issue.hasTag("")) { if (issue.hasTag("")) { issue.applyCommand("  "); if (issue.isoverdue == {}) { issue.isoverdue = null; } } //  (  ) } else { if (!issue.hasTag("")) { issue.applyCommand("  "); if (issue.isoverdue == null) { issue.isoverdue = {}; } } } } }
      
      







タスクを停止するのを忘れて家に帰った場合、YouTrackがあなたのためにそれを行います:



 schedule rule pause all issues in overtime daily at 18:15:00 [issue.Timer == { }] { issue.Timer = {}; }
      
      







まあ、それだけです。 私の投稿がいつか役立つことを願っています。



質問/コメントは、コメントまたはプライベートメッセージに書き込みます。



All Articles